SlideShare ist ein Scribd-Unternehmen logo
1 von 59
Downloaden Sie, um offline zu lesen
人力
     @emasaka
       #tqrk02
入力
     @emasaka
       #tqrk02
Introduce Myself

   自己紹介
Occupation

   職業
FREE
 無職
Period

 以上
Main Topic

  本題
Termtter
Troubles happens
 around “Input”

入力まわりはトラブルの巣
And

そして
We hopes to extend
 “Input” by Ruby

 入力をRubyで拡張したい
Example: Prompt the number of
          characters




 例:文字数をプロンプトに表示
                      ※画面は合成です
Example: Auto Complete




例:自動補完
                  ※画面は合成です
For that purpose

  そのために
Extend readline by Ruby?

   readlineをRubyで拡張?
Have to handle...

● C functions
● C variables

● C datas



    Cの関数、Cの変数、Cのデータ
    を扱わなくちゃならない
Port readline by Ruby?

 readlineをRubyに移植?
Many codes
$ cat *.[ch] | wc ­l
28955




        大量のコード
Many global variables
$ ruby ­ne 'next if /#|f|./; 
print gsub(/x7f.*/, "")' TAGS | 
wc ­l
1017




     大量のグローバル変数、
     static変数
Local static variables
$ grep '^  *static' *.c | wc ­l
39




    ローカルのstatic変数も
Strange code
int
rl_bind_key_in_map (key, function, map)
     int key;
     rl_command_func_t *function;
     Keymap map;
{
  int result;
  Keymap oldmap;

  oldmap = _rl_keymap;
  _rl_keymap = map;
  result = rl_bind_key (key, function);
  _rl_keymap = oldmap;
  return (result);
}


            へんなコード
int
rl_bind_key_in_map (key, function, map)
     int key;
     rl_command_func_t *function;
     Keymap map;
{
  int result;
  Keymap oldmap;
                                     Differs one
                                     argument
  oldmap = _rl_keymap;
  _rl_keymap = map;
  result = rl_bind_key (key, function);
  _rl_keymap = oldmap;
  return (result);
}


            引数1個が違う関数
① save global variable
int
rl_bind_key_in_map (key, function, map)
     int key;
     rl_command_func_t *function;
     Keymap map;
{
  int result;
  Keymap oldmap;

  oldmap = _rl_keymap;
  _rl_keymap = map;
  result = rl_bind_key (key, function);
  _rl_keymap = oldmap;
  return (result);
}


            グローバル変数を保存
② set argument to global variable
int
rl_bind_key_in_map (key, function, map)
     int key;
     rl_command_func_t *function;
     Keymap map;
{
  int result;
  Keymap oldmap;

  oldmap = _rl_keymap;
  _rl_keymap = map;
  result = rl_bind_key (key, function);
  _rl_keymap = oldmap;
  return (result);
}


     引数をグローバル変数にセット
③ call function
int
rl_bind_key_in_map (key, function, map)
     int key;
     rl_command_func_t *function;
     Keymap map;
{
  int result;
  Keymap oldmap;

  oldmap = _rl_keymap;
  _rl_keymap = map;
  result = rl_bind_key (key, function);
  _rl_keymap = oldmap;
  return (result);
}


            関数呼び出し
④ restore global variable
int
rl_bind_key_in_map (key, function, map)
     int key;
     rl_command_func_t *function;
     Keymap map;
{
  int result;
  Keymap oldmap;

  oldmap = _rl_keymap;
  _rl_keymap = map;
  result = rl_bind_key (key, function);
  _rl_keymap = oldmap;
  return (result);
}


            グローバル変数を復旧
( ゚д゚)
Make readline-like library
       by Ruby?

   readlineモドキをRubyで
   新しく作る?
ReadRhine
http://github.com/emasaka/ReadRhine
Works only on Ruby 1.9
     (for character handling)



  Ruby 1.9系専用
  (文字の扱いが違うので)
Requires (from gem)

● ruby-termios
● ruby-terminfo
●   “xterm” in terminfo
    (I found it this morning)




             terminfoで“xterm”
             (今朝気付いた)
How to use

 使い方
OOP interface
require 'readrhine'

rr = ReadRhine.new(prompt: '> ')
text = rr.readline




     OOPインターフェイス
readline compatible interface
require 'readrhine/rlcompat'

text = ReadRhine.readline('> ')




    readline互換インターフェイス
Structure

  構造
MVC
Models             Views
                   Display
Buffer
Keymap
History            Controls
Undo               Command
Completion
Models don't depend on
  Views and Controls

    ModelはViewやControlに
    依存していない
Main loop
                             read
while true
  seq = read_key_seq(@keymap)
  dispatch(seq, @keymap)     eval
  @display.redisplay
end                       print



         メインループ
unit test friendly

ユニットテストしやすい
Spec of Buffer
it "should contains inserted string at top" do
  ins_str1 = 'xyz'
  ins_str2 = '123'
  @buffer.insert(ins_str1)
  @buffer.point = 0
  @buffer.insert(ins_str2)
  @buffer.to_s.should == ins_str2 + ins_str1
end



            BufferのSpec
Spec of Completion
describe ReadRhine::Completion, "when given completion_proc" 
do
  before do
    @list1 = %w[foobar foobaz foohoge]
    @buffer = ReadRhine::Buffer.new
    @completion = ReadRhine::Completion.new(@buffer)
    @completion.completion_proc = ­>(_){@list1}
  end

  it "should get common string" do
    @completion.attempted_completion('').should == 'foo'
  end
end

                 CompletionのSpec
Internal DSL

 内部DSL
Key definition
@keymap = Keymap.new
@keymap["C­f"] = :forward_char
@keymap["C­xC­u"] = :undo




            キーの定義
Available commands

  いまあるコマンド
Cursor movement
@@default_keymap["C­a"] = :beginning_of_line
@@default_keymap["C­b"] = :backward_char
@@default_keymap["C­e"] = :end_of_line
@@default_keymap["C­f"] = :forward_char
@@default_keymap["e[D"] = :backward_char
@@default_keymap["e[C"] = :forward_char
@@default_keymap["eOH"] = :beginning_of_line
@@default_keymap["eOF"] = :end_of_line



            カーソル移動
Finishing
@@default_keymap["C­j"] = :done
@@default_keymap["C­m"] = :done




            入力終了
Deleting
@@default_keymap["C­d"] = :delete_char
@@default_keymap["C­h"] = :backward_delete_char
@@default_keymap["C­k"] = :kill_line
@@default_keymap["C­u"] = :unix_line_discard
@@default_keymap["x7f"] = :backward_delete_char




             削除
undo
@@default_keymap["C­_"] = :undo
@@default_keymap["C­xC­u"] = :undo




            アンドゥ
Completion
@@default_keymap["C­i"] = :complete

@@default_keymap["C­i"] = :menu_complete




            補完
History
@@default_keymap["C­n"] = :next_history
@@default_keymap["C­p"] = :previous_history
@@default_keymap["e[A"] = :previous_history
@@default_keymap["e[B"] = :next_history




            履歴
TODOs

やんなくちゃならないこと
●   Safe signal handling
●   More about completion
●   History search
●   Per-word cursor movement
●   Digit argument
●   ...
Most confusing is ...

 いちばんややこしいのは…
character width

  文字幅
Width of “☆” is ...

   “☆”の幅は…
Only terminal knows

   そのターミナルだけが
   知っている
Messy

めんどくさい
DEMO

デモ

Weitere ähnliche Inhalte

Was ist angesagt?

第1回PHP拡張勉強会
第1回PHP拡張勉強会第1回PHP拡張勉強会
第1回PHP拡張勉強会Ippei Ogiwara
 
M11 operator overloading and type conversion
M11 operator overloading and type conversionM11 operator overloading and type conversion
M11 operator overloading and type conversionNabeelaNousheen
 
Functions in C++
Functions in C++Functions in C++
Functions in C++home
 
Functions in C++ (OOP)
Functions in C++ (OOP)Functions in C++ (OOP)
Functions in C++ (OOP)Faizan Janjua
 
Continuations
ContinuationsContinuations
Continuationsopenbala
 
C++ Function
C++ FunctionC++ Function
C++ FunctionHajar
 
Unit 3(rdbms)
Unit 3(rdbms)Unit 3(rdbms)
Unit 3(rdbms)Jay Patel
 
FUNCTIONS IN c++ PPT
FUNCTIONS IN c++ PPTFUNCTIONS IN c++ PPT
FUNCTIONS IN c++ PPT03062679929
 
{{components deepDive=true}}
{{components deepDive=true}}{{components deepDive=true}}
{{components deepDive=true}}raytiley
 
Php server variables
Php server variablesPhp server variables
Php server variablesJIGAR MAKHIJA
 
02 Php Vars Op Control Etc
02 Php Vars Op Control Etc02 Php Vars Op Control Etc
02 Php Vars Op Control EtcGeshan Manandhar
 
The Beautiful Simplicity of ES2015
The Beautiful Simplicity of ES2015The Beautiful Simplicity of ES2015
The Beautiful Simplicity of ES2015Brandon Belvin
 

Was ist angesagt? (19)

第1回PHP拡張勉強会
第1回PHP拡張勉強会第1回PHP拡張勉強会
第1回PHP拡張勉強会
 
M11 operator overloading and type conversion
M11 operator overloading and type conversionM11 operator overloading and type conversion
M11 operator overloading and type conversion
 
PHP function
PHP functionPHP function
PHP function
 
Functions in C++
Functions in C++Functions in C++
Functions in C++
 
Functions in C++ (OOP)
Functions in C++ (OOP)Functions in C++ (OOP)
Functions in C++ (OOP)
 
Continuations
ContinuationsContinuations
Continuations
 
C++ Function
C++ FunctionC++ Function
C++ Function
 
Unit 3(rdbms)
Unit 3(rdbms)Unit 3(rdbms)
Unit 3(rdbms)
 
FUNCTIONS IN c++ PPT
FUNCTIONS IN c++ PPTFUNCTIONS IN c++ PPT
FUNCTIONS IN c++ PPT
 
C++ functions
C++ functionsC++ functions
C++ functions
 
Python Programming Essentials - M5 - Variables
Python Programming Essentials - M5 - VariablesPython Programming Essentials - M5 - Variables
Python Programming Essentials - M5 - Variables
 
Php string function
Php string function Php string function
Php string function
 
{{components deepDive=true}}
{{components deepDive=true}}{{components deepDive=true}}
{{components deepDive=true}}
 
PL/SQL
PL/SQLPL/SQL
PL/SQL
 
C and C++ functions
C and C++ functionsC and C++ functions
C and C++ functions
 
Functions in C++
Functions in C++Functions in C++
Functions in C++
 
Php server variables
Php server variablesPhp server variables
Php server variables
 
02 Php Vars Op Control Etc
02 Php Vars Op Control Etc02 Php Vars Op Control Etc
02 Php Vars Op Control Etc
 
The Beautiful Simplicity of ES2015
The Beautiful Simplicity of ES2015The Beautiful Simplicity of ES2015
The Beautiful Simplicity of ES2015
 

Ähnlich wie 人力

Cse115 lecture04introtoc programming
Cse115 lecture04introtoc programmingCse115 lecture04introtoc programming
Cse115 lecture04introtoc programmingMd. Ashikur Rahman
 
Unit 4
Unit 4Unit 4
Unit 4siddr
 
Fundamentals of computer programming by Dr. A. Charan Kumari
Fundamentals of computer programming by Dr. A. Charan KumariFundamentals of computer programming by Dr. A. Charan Kumari
Fundamentals of computer programming by Dr. A. Charan KumariTHE NORTHCAP UNIVERSITY
 
Unit 5 Foc
Unit 5 FocUnit 5 Foc
Unit 5 FocJAYA
 
An imperative study of c
An imperative study of cAn imperative study of c
An imperative study of cTushar B Kute
 
Introduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoaIntroduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoaFlorent Pillet
 
46630497 fun-pointer-1
46630497 fun-pointer-146630497 fun-pointer-1
46630497 fun-pointer-1AmIt Prasad
 
Verilog TASKS & FUNCTIONS
Verilog TASKS & FUNCTIONSVerilog TASKS & FUNCTIONS
Verilog TASKS & FUNCTIONSDr.YNM
 
Being functional in PHP (PHPDay Italy 2016)
Being functional in PHP (PHPDay Italy 2016)Being functional in PHP (PHPDay Italy 2016)
Being functional in PHP (PHPDay Italy 2016)David de Boer
 
Preparing for the next PHP version (5.6)
Preparing for the next PHP version (5.6)Preparing for the next PHP version (5.6)
Preparing for the next PHP version (5.6)Damien Seguy
 
FUNCTIONS, CLASSES AND OBJECTS.pptx
FUNCTIONS, CLASSES AND OBJECTS.pptxFUNCTIONS, CLASSES AND OBJECTS.pptx
FUNCTIONS, CLASSES AND OBJECTS.pptxDeepasCSE
 
Functions IN CPROGRAMMING OF ENGINEERING.pptx
Functions IN CPROGRAMMING OF ENGINEERING.pptxFunctions IN CPROGRAMMING OF ENGINEERING.pptx
Functions IN CPROGRAMMING OF ENGINEERING.pptxvanshhans21102005
 

Ähnlich wie 人力 (20)

Cse115 lecture04introtoc programming
Cse115 lecture04introtoc programmingCse115 lecture04introtoc programming
Cse115 lecture04introtoc programming
 
Unit 4
Unit 4Unit 4
Unit 4
 
Fundamentals of computer programming by Dr. A. Charan Kumari
Fundamentals of computer programming by Dr. A. Charan KumariFundamentals of computer programming by Dr. A. Charan Kumari
Fundamentals of computer programming by Dr. A. Charan Kumari
 
Unit 5 Foc
Unit 5 FocUnit 5 Foc
Unit 5 Foc
 
Fucntions & Pointers in C
Fucntions & Pointers in CFucntions & Pointers in C
Fucntions & Pointers in C
 
Buffer OverFlow
Buffer OverFlowBuffer OverFlow
Buffer OverFlow
 
An imperative study of c
An imperative study of cAn imperative study of c
An imperative study of c
 
Introduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoaIntroduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoa
 
46630497 fun-pointer-1
46630497 fun-pointer-146630497 fun-pointer-1
46630497 fun-pointer-1
 
Verilog TASKS & FUNCTIONS
Verilog TASKS & FUNCTIONSVerilog TASKS & FUNCTIONS
Verilog TASKS & FUNCTIONS
 
Being functional in PHP (PHPDay Italy 2016)
Being functional in PHP (PHPDay Italy 2016)Being functional in PHP (PHPDay Italy 2016)
Being functional in PHP (PHPDay Italy 2016)
 
runtimestack
runtimestackruntimestack
runtimestack
 
Preparing for the next PHP version (5.6)
Preparing for the next PHP version (5.6)Preparing for the next PHP version (5.6)
Preparing for the next PHP version (5.6)
 
Php
PhpPhp
Php
 
FUNCTIONS, CLASSES AND OBJECTS.pptx
FUNCTIONS, CLASSES AND OBJECTS.pptxFUNCTIONS, CLASSES AND OBJECTS.pptx
FUNCTIONS, CLASSES AND OBJECTS.pptx
 
Groovy
GroovyGroovy
Groovy
 
Functions IN CPROGRAMMING OF ENGINEERING.pptx
Functions IN CPROGRAMMING OF ENGINEERING.pptxFunctions IN CPROGRAMMING OF ENGINEERING.pptx
Functions IN CPROGRAMMING OF ENGINEERING.pptx
 
Session 3
Session 3Session 3
Session 3
 
Gun make
Gun makeGun make
Gun make
 
7 functions
7  functions7  functions
7 functions
 

Mehr von emasaka

ibus-skkをなんとかすっぺ会議
ibus-skkをなんとかすっぺ会議ibus-skkをなんとかすっぺ会議
ibus-skkをなんとかすっぺ会議emasaka
 
濁点の話
濁点の話濁点の話
濁点の話emasaka
 
GoBoLinuxを試した
GoBoLinuxを試したGoBoLinuxを試した
GoBoLinuxを試したemasaka
 
さくらのクラウドでh2oのベンチマーク
さくらのクラウドでh2oのベンチマークさくらのクラウドでh2oのベンチマーク
さくらのクラウドでh2oのベンチマークemasaka
 
みおぽん for CLI
みおぽん for CLIみおぽん for CLI
みおぽん for CLIemasaka
 
GNU make 4.0に何かいる
GNU make 4.0に何かいるGNU make 4.0に何かいる
GNU make 4.0に何かいるemasaka
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRubyemasaka
 
長いの
長いの長いの
長いのemasaka
 
)の品格
)の品格)の品格
)の品格emasaka
 
エコなWebサーバー
エコなWebサーバーエコなWebサーバー
エコなWebサーバーemasaka
 
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発emasaka
 
Bash on Railsの逆襲
Bash on Railsの逆襲Bash on Railsの逆襲
Bash on Railsの逆襲emasaka
 

Mehr von emasaka (12)

ibus-skkをなんとかすっぺ会議
ibus-skkをなんとかすっぺ会議ibus-skkをなんとかすっぺ会議
ibus-skkをなんとかすっぺ会議
 
濁点の話
濁点の話濁点の話
濁点の話
 
GoBoLinuxを試した
GoBoLinuxを試したGoBoLinuxを試した
GoBoLinuxを試した
 
さくらのクラウドでh2oのベンチマーク
さくらのクラウドでh2oのベンチマークさくらのクラウドでh2oのベンチマーク
さくらのクラウドでh2oのベンチマーク
 
みおぽん for CLI
みおぽん for CLIみおぽん for CLI
みおぽん for CLI
 
GNU make 4.0に何かいる
GNU make 4.0に何かいるGNU make 4.0に何かいる
GNU make 4.0に何かいる
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRuby
 
長いの
長いの長いの
長いの
 
)の品格
)の品格)の品格
)の品格
 
エコなWebサーバー
エコなWebサーバーエコなWebサーバー
エコなWebサーバー
 
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
 
Bash on Railsの逆襲
Bash on Railsの逆襲Bash on Railsの逆襲
Bash on Railsの逆襲
 

Kürzlich hochgeladen

办理西悉尼大学毕业证成绩单、制作假文凭
办理西悉尼大学毕业证成绩单、制作假文凭办理西悉尼大学毕业证成绩单、制作假文凭
办理西悉尼大学毕业证成绩单、制作假文凭o8wvnojp
 
南新罕布什尔大学毕业证学位证成绩单-学历认证
南新罕布什尔大学毕业证学位证成绩单-学历认证南新罕布什尔大学毕业证学位证成绩单-学历认证
南新罕布什尔大学毕业证学位证成绩单-学历认证kbdhl05e
 
Call Girls In Dwarka Sub City ☎️7838079806 ✅ 💯Call Girls In Delhi
Call Girls In Dwarka Sub City  ☎️7838079806 ✅ 💯Call Girls In DelhiCall Girls In Dwarka Sub City  ☎️7838079806 ✅ 💯Call Girls In Delhi
Call Girls In Dwarka Sub City ☎️7838079806 ✅ 💯Call Girls In DelhiSoniyaSingh
 
(No.1)↠Young Call Girls in Sikanderpur (Gurgaon) ꧁❤ 9711911712 ❤꧂ Escorts
(No.1)↠Young Call Girls in Sikanderpur (Gurgaon) ꧁❤ 9711911712 ❤꧂ Escorts(No.1)↠Young Call Girls in Sikanderpur (Gurgaon) ꧁❤ 9711911712 ❤꧂ Escorts
(No.1)↠Young Call Girls in Sikanderpur (Gurgaon) ꧁❤ 9711911712 ❤꧂ EscortsDelhi Escorts Service
 
Inspiring Through Words Power of Inspiration.pptx
Inspiring Through Words Power of Inspiration.pptxInspiring Through Words Power of Inspiration.pptx
Inspiring Through Words Power of Inspiration.pptxShubham Rawat
 
Call Girls in Govindpuri Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Govindpuri Delhi 💯Call Us 🔝8264348440🔝Call Girls in Govindpuri Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Govindpuri Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
西伦敦大学毕业证学位证成绩单-怎么样做
西伦敦大学毕业证学位证成绩单-怎么样做西伦敦大学毕业证学位证成绩单-怎么样做
西伦敦大学毕业证学位证成绩单-怎么样做j5bzwet6
 
E J Waggoner against Kellogg's Pantheism 8.pptx
E J Waggoner against Kellogg's Pantheism 8.pptxE J Waggoner against Kellogg's Pantheism 8.pptx
E J Waggoner against Kellogg's Pantheism 8.pptxJackieSparrow3
 
Authentic No 1 Amil Baba In Pakistan Amil Baba In Faisalabad Amil Baba In Kar...
Authentic No 1 Amil Baba In Pakistan Amil Baba In Faisalabad Amil Baba In Kar...Authentic No 1 Amil Baba In Pakistan Amil Baba In Faisalabad Amil Baba In Kar...
Authentic No 1 Amil Baba In Pakistan Amil Baba In Faisalabad Amil Baba In Kar...Authentic No 1 Amil Baba In Pakistan
 
(南达科他州立大学毕业证学位证成绩单-永久存档)
(南达科他州立大学毕业证学位证成绩单-永久存档)(南达科他州立大学毕业证学位证成绩单-永久存档)
(南达科他州立大学毕业证学位证成绩单-永久存档)oannq
 
Call Girls In Karkardooma 83770 87607 Just-Dial Escorts Service 24X7 Avilable
Call Girls In Karkardooma 83770 87607 Just-Dial Escorts Service 24X7 AvilableCall Girls In Karkardooma 83770 87607 Just-Dial Escorts Service 24X7 Avilable
Call Girls In Karkardooma 83770 87607 Just-Dial Escorts Service 24X7 Avilabledollysharma2066
 

Kürzlich hochgeladen (12)

办理西悉尼大学毕业证成绩单、制作假文凭
办理西悉尼大学毕业证成绩单、制作假文凭办理西悉尼大学毕业证成绩单、制作假文凭
办理西悉尼大学毕业证成绩单、制作假文凭
 
南新罕布什尔大学毕业证学位证成绩单-学历认证
南新罕布什尔大学毕业证学位证成绩单-学历认证南新罕布什尔大学毕业证学位证成绩单-学历认证
南新罕布什尔大学毕业证学位证成绩单-学历认证
 
Call Girls In Dwarka Sub City ☎️7838079806 ✅ 💯Call Girls In Delhi
Call Girls In Dwarka Sub City  ☎️7838079806 ✅ 💯Call Girls In DelhiCall Girls In Dwarka Sub City  ☎️7838079806 ✅ 💯Call Girls In Delhi
Call Girls In Dwarka Sub City ☎️7838079806 ✅ 💯Call Girls In Delhi
 
(No.1)↠Young Call Girls in Sikanderpur (Gurgaon) ꧁❤ 9711911712 ❤꧂ Escorts
(No.1)↠Young Call Girls in Sikanderpur (Gurgaon) ꧁❤ 9711911712 ❤꧂ Escorts(No.1)↠Young Call Girls in Sikanderpur (Gurgaon) ꧁❤ 9711911712 ❤꧂ Escorts
(No.1)↠Young Call Girls in Sikanderpur (Gurgaon) ꧁❤ 9711911712 ❤꧂ Escorts
 
Inspiring Through Words Power of Inspiration.pptx
Inspiring Through Words Power of Inspiration.pptxInspiring Through Words Power of Inspiration.pptx
Inspiring Through Words Power of Inspiration.pptx
 
Call Girls in Govindpuri Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Govindpuri Delhi 💯Call Us 🔝8264348440🔝Call Girls in Govindpuri Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Govindpuri Delhi 💯Call Us 🔝8264348440🔝
 
Model Call Girl in Lado Sarai Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Lado Sarai Delhi reach out to us at 🔝9953056974🔝Model Call Girl in Lado Sarai Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Lado Sarai Delhi reach out to us at 🔝9953056974🔝
 
西伦敦大学毕业证学位证成绩单-怎么样做
西伦敦大学毕业证学位证成绩单-怎么样做西伦敦大学毕业证学位证成绩单-怎么样做
西伦敦大学毕业证学位证成绩单-怎么样做
 
E J Waggoner against Kellogg's Pantheism 8.pptx
E J Waggoner against Kellogg's Pantheism 8.pptxE J Waggoner against Kellogg's Pantheism 8.pptx
E J Waggoner against Kellogg's Pantheism 8.pptx
 
Authentic No 1 Amil Baba In Pakistan Amil Baba In Faisalabad Amil Baba In Kar...
Authentic No 1 Amil Baba In Pakistan Amil Baba In Faisalabad Amil Baba In Kar...Authentic No 1 Amil Baba In Pakistan Amil Baba In Faisalabad Amil Baba In Kar...
Authentic No 1 Amil Baba In Pakistan Amil Baba In Faisalabad Amil Baba In Kar...
 
(南达科他州立大学毕业证学位证成绩单-永久存档)
(南达科他州立大学毕业证学位证成绩单-永久存档)(南达科他州立大学毕业证学位证成绩单-永久存档)
(南达科他州立大学毕业证学位证成绩单-永久存档)
 
Call Girls In Karkardooma 83770 87607 Just-Dial Escorts Service 24X7 Avilable
Call Girls In Karkardooma 83770 87607 Just-Dial Escorts Service 24X7 AvilableCall Girls In Karkardooma 83770 87607 Just-Dial Escorts Service 24X7 Avilable
Call Girls In Karkardooma 83770 87607 Just-Dial Escorts Service 24X7 Avilable
 

人力