Thursday 28 December 2017

Gdbserver الذراع ثنائي - خيارات


قاعدة المعارف مفقود ليبلتيبيتغدبزيرفر تحدث هذه المشكلة عند فيسوالدب لا يمكن العثور على ثنائي غبسيرفر داخل الدليل ليبلتيبيغت المشروع الخاص بك. مطلوب غبسيرفر لتصحيح التطبيق الخاص بك وعادة ما يتم نسخها تلقائيا من قبل البرنامج النصي بناء ندك. إذا كان المشروع يفتقد هذا الملف، يرجى التحقق مما يلي: تأكد من أنك تقوم ببناء إصدار تصحيح. يجب استدعاء Ndk - جعل مع حجة NDKDEBUG1. يمكنك مشاهدة وسيطات ندك-ميك في إطار الإخراج في فيسوال ستوديو عند إنشاء التطبيق الخاص بك. لا يمكنك تصحيح بناء الإصدار من التطبيق الخاص بك بسبب القيود المفروضة على الروبوت ندك. تأكد من أن ملف AndroidManifest. xml يحتوي على الروبوت: السمة القابلة للتصحيح تعيين إلى ترو. إعادة بناء التطبيق الخاص بك ومراقبة الانتاج بناء في إطار الإخراج. يجب أن تبدو مشابهة لهذا: 1gt c: أندرويد-ندك-r8ndk-build. cmd NDKDEBUG1 أببلاتفورماندرويد-3 1gt غبسيرفر. أرم-لينوكس-أندرويدابي-4.4.3 ليبسارمابيغدبسيرفر 1gt 1gt غبسيتوب. libsarmeabigdb. setup 1gt 1gt تثبيت. libAndroidApp25.so غ libsarmeabilibAndroidApp25.so 1gt 1gt فيسوالغدب: تثبيت غبسيرفر محدثة إلى E: ProjectSTEMPAndroidApp25libsarmeabigdbserver أول خط جريء بالذكر ليبسارميابدبدزيرفر يجب أن يكون دائما موجودة. السطر الأخير بالذكر غبسيرفر محدثة يمكن أن يكون مفقودا إذا قمت بتعطيل غب 7.x في فيسوالغدب بروجيكت بروبيرتيز. إذا تقارير نك-بيلد أن غبسيرفر تم نسخها إلى أرمابي. ولكن فيسوالدغب تتوقع ذلك في أرمابي-v7a. وهذا يعني أن جهازك قد تحميل المكتبات أرمابي ويتطلب غبسيرفر ليتم تثبيتها على المجلد أرمابي. في هذه الحالة، يرجى فتح الملف Application. mk والتأكد من أن أرمابي موجود في تعريف أبابي. إذا كان ندك-بيلد لا يمكن نسخ غبسيرفر، يرجى التأكد من أنك تستخدم أحدث ندك (على الأقل r8)، وأن الملف لندكتولشينزارم-لينوكس-أندرويدابي-4.4.3prebuiltgdbserver موجود. تصحيح البرامج عن بعد 16.1 استخدام برنامج غبسيرفر غبسيرفر هو برنامج تحكم لأنظمة تشبه أونيكس، والذي يسمح لك بتوصيل البرنامج باستخدام غب عن بعد عن طريق الهدف البعيد --- ولكن من دون ربط في كعب التصحيح المعتاد. غبسيرفر ليس بديلا كاملا لبقع التصحيح، لأنه يتطلب أساسا نفس مرافق نظام التشغيل التي غب نفسها لا. في الواقع، يمكن للنظام الذي يمكن تشغيل غبسيرفر للاتصال غب عن بعد أيضا تشغيل غب محليا غبسيرفر مفيدة في بعض الأحيان، لأنه هو برنامج أصغر بكثير من غب نفسها. ومن السهل أيضا إلى ميناء من كل من غب، لذلك قد تكون قادرة على البدء بسرعة أكبر على نظام جديد باستخدام غبسيرفر. وأخيرا، إذا كنت قد وضعت رمز لأنظمة الوقت الحقيقي، قد تجد أن المقايضات المشاركة في الوقت الحقيقي العملية تجعل من أكثر ملاءمة للقيام بقدر أكبر من العمل التنموي ممكن على نظام آخر، على سبيل المثال عن طريق تجميع. يمكنك استخدام غبسيرفر لجعل خيار مماثل لتصحيح الأخطاء. غب و غبسرفر التواصل عبر إما خط تسلسلي أو اتصال تكب، وذلك باستخدام معيار غب بروتوكول التسلسلي البعيد. على الجهاز الهدف، تحتاج إلى أن يكون لديك نسخة من البرنامج الذي تريد تصحيح. غبسيرفر لا يحتاج جدول رموز البرامج الخاصة بك، حتى تتمكن من تجريد البرنامج إذا لزم الأمر لتوفير مساحة. غب على النظام المضيف يفعل كل التعامل مع رمز. لاستخدام الخادم، يجب أن تخبره عن كيفية التواصل مع غب واسم البرنامج الخاص بك وسيطات البرنامج. بناء الجملة المعتاد هو: كوم إما اسم جهاز (لاستخدام خط تسلسلي) أو اسم مضيف تكب و بورتنومبر. على سبيل المثال، لتصحيح إماكس مع حجة foo. txt والتواصل مع غب عبر المنفذ التسلسلي devcom1. غبسيرفر ينتظر بشكل سلبي للمضيف غب للتواصل معها. لاستخدام اتصال تكب بدلا من خط تسلسلي: الاختلاف الوحيد من المثال السابق هو الوسيطة الأولى، مع تحديد أنك تتصل مع غب المضيف عبر تكب. المضيف: 2345 الوسيطة تعني أن غبسيرفر هو توقع اتصال تكب من مضيف الجهاز إلى منفذ تكب المحلي 2345. (حاليا يتم تجاهل الجزء المضيف.) يمكنك اختيار أي رقم تريد رقم المنفذ طالما أنها لا مع أي منافذ تكب قيد الاستخدام بالفعل على النظام المستهدف (على سبيل المثال، 23 محجوز ل تلنيت). (5) يجب استخدام نفس رقم المنفذ مع الأمر المستضيف غب المستهدف عن بعد. في بعض الأهداف، يمكن غبسرفر أيضا إرفاق البرامج قيد التشغيل. يتم إنجاز ذلك عبر الوسيطة --attach. بناء الجملة هو: بيد هو معرف العملية لعملية قيد التشغيل حاليا. ليس من الضروري أن نشير غبسيرفر في ثنائي لعملية التشغيل. على الجهاز المضيف غب، تحتاج إلى نسخة أونستريبد من البرنامج الخاص بك، منذ غب يحتاج إلى رموز ومعلومات التصحيح. بدء غب كالمعتاد، وذلك باستخدام اسم النسخة المحلية من البرنامج الخاص بك كما الوسيطة الأولى. (قد تحتاج أيضا إلى الخيار --baud إذا كان الخط التسلسلي قيد التشغيل في أي شيء آخر غير 9600bps.) بعد ذلك، استخدم جهاز التحكم عن بعد الهدف لإنشاء اتصالات مع غبسيرفر. حجته هي إما اسم جهاز (عادة جهاز تسلسلي، مثل ديفتيب)، أو واصف منفذ تكب في مضيف النموذج. ميناء. على سبيل المثال: 16.2 باستخدام gdbserve. nlm برنامج gdbserve. nlm هو برنامج التحكم لأنظمة نيتوار، والذي يسمح لك لربط البرنامج الخاص بك مع غب عن بعد عن طريق الهدف عن بعد. غب و gdbserve. nlm التواصل عبر خط تسلسلي، وذلك باستخدام معيار غب بروتوكول التسلسلي البعيد. على الجهاز الهدف، تحتاج إلى أن يكون لديك نسخة من البرنامج الذي تريد تصحيح. gdbserve. nlm لا يحتاج جدول رموز البرامج الخاصة بك، حتى تتمكن من تجريد البرنامج إذا لزم الأمر لتوفير مساحة. غب على النظام المضيف يفعل كل التعامل مع رمز. لاستخدام الخادم، يجب أن تخبره عن كيفية التواصل مع غب واسم البرنامج الخاص بك وسيطات البرنامج. بناء الجملة هو: المجلس والمنفذ تحديد خط المسلسل الباود يحدد معدل الباود المستخدمة من قبل الاتصال. ميناء والعقدة الافتراضي إلى 0، باود الافتراضية إلى 9600bps. على سبيل المثال، لتصحيح إماكس مع الوسيطة foo. txt والتواصل مع غب عبر المنفذ التسلسلي رقم 2 أو لوحة 1 باستخدام اتصال 19200bps: على الجهاز المضيف غب، تحتاج إلى نسخة غير مستخرج من البرنامج الخاص بك، لأن غب يحتاج إلى رموز وتصحيح الأخطاء معلومات. بدء غب كالمعتاد، وذلك باستخدام اسم النسخة المحلية من البرنامج الخاص بك كما الوسيطة الأولى. (قد تحتاج أيضا إلى خيار --baud إذا كان الخط التسلسلي يعمل في أي شيء آخر بخلاف 9600bps، وبعد ذلك، استخدم جهاز التحكم عن بعد الهدف لإنشاء اتصالات مع gdbserve. nlm، حجته هي اسم الجهاز (عادة جهاز تسلسلي، مثل ديفتيب ) على سبيل المثال: الاتصالات مع الخادم عبر الخط التسلسلي ديفتيب 16.3 تنفيذ كعب عن بعد تنفذ ملفات الكعب المزودة ب غب الجانب المستهدف لبروتوكول الاتصال، وينفذ جانب غب في ملف مصدر غب عن بعد. ج عادة ، يمكنك ببساطة السماح لهذه الروتين الفرعي بالاتصال، وتجاهل التفاصيل. (إذا كنت تقوم بتنفيذ ملف كعب الخاص بك، يمكنك الاستمرار في تجاهل التفاصيل: تبدأ مع أحد ملفات كعب القائمة. بارك-stub. c هو أفضل تنظيما، وبالتالي أسهل القراءة.) لتصحيح برنامج يعمل على جهاز آخر (الجهاز الهدف التصحيح)، يجب أولا ترتيب لجميع المتطلبات الأساسية المعتادة للبرنامج لتشغيل نفسه. على سبيل المثال، لبرنامج C، تحتاج : نجم توب روتين لإعداد بيئة وقت التشغيل C هذه عادة ما يكون لها اسم مثل crt0. قد يتم توفير روتين بدء التشغيل من قبل مورد الجهاز الخاص بك، أو قد تضطر إلى كتابة بنفسك. مكتبة فرعية فرعية C لدعم مكالمات البرامج الفرعية الخاصة بك، ولا سيما إدارة المدخلات والمخرجات. طريقة للحصول على البرنامج الخاص بك إلى الجهاز الآخر - على سبيل المثال، برنامج التنزيل. وغالبا ما يتم توفير هذه من قبل الشركة المصنعة للجهاز، ولكن قد تضطر إلى كتابة بنفسك من وثائق الأجهزة. الخطوة التالية هي ترتيب البرنامج لاستخدام منفذ تسلسلي للتواصل مع الجهاز حيث يتم تشغيل غب (الجهاز المضيف). وبصفة عامة، يبدو مخطط مثل هذا: على المضيف، غب يفهم بالفعل كيفية استخدام هذا البروتوكول عند إعداد كل شيء آخر، يمكنك ببساطة استخدام الأمر عن بعد الهدف (انظر القسم تحديد هدف التصحيح). على الهدف، يجب أن تتصل مع البرنامج الخاص بك بضع بروتوكولات فرعية الغرض الخاص التي تنفذ بروتوكول تسلسل غب البعيد. ويسمى الملف الذي يحتوي على هذه الروتين الفرعي كعب تصحيح الأخطاء. على أهداف بعيدة معينة، يمكنك استخدام غبسيرفر برنامج مساعد بدلا من ربط كعب في البرنامج الخاص بك. راجع القسم استخدام برنامج غبسيرفر. للتفاصيل. كعب التصحيح محددة لهندسة الجهاز البعيد على سبيل المثال، استخدم سبارك-stub. c لتصحيح البرامج على لوحات سبارك. يتم توزيع هذه البذرة العمل عن بعد مع غب: i386-stub. c لشركة إنتل 386 والبنية المتوافقة. m68k-stub. c لمباني موتورولا 680x0. ش-stub. c لهياكل هيتاشي ش. سبارك-stub. c عن أباركس سبارك. سباركل-stub. c لأبنية فوجيتسو سباركليت. قد يحتوي الملف ريدمي في توزيع غب على قائمة أخرى أخرى تمت إضافتها مؤخرا. 16.3.1 ما الذي يمكن أن يفعله الكعب بالنسبة لك كعب التصحيح لهندسة المعمارية الخاصة بك لوازم هذه الروتين الفرعية الثلاثة: سيتديبوجترابس هذا الروتين يرتب ل هولدريسيبتيون لتشغيل عندما يتوقف البرنامج الخاص بك. يجب عليك استدعاء هذا البرنامج الفرعي بشكل صريح بالقرب من بداية البرنامج. هاندليكسسيبتيون هذا هو العمود الفقري المركزي، ولكن البرنامج الخاص بك أبدا يدعو ذلك صراحة - رمز الإعداد يرتب ل هاندلسيبتيون لتشغيل عندما يتم تشغيل فخ. يتحكم هاندلكسسيبتيون عندما يتوقف البرنامج أثناء التنفيذ (على سبيل المثال، عند نقطة توقف)، ويتوسط الاتصالات مع غب على الجهاز المضيف. هذا هو المكان الذي يتم تنفيذ بروتوكول الاتصالات التعامل مع مقبض كممثل غب على الجهاز المستهدف. فإنه يبدأ بإرسال معلومات موجزة عن حالة البرنامج الخاص بك، ثم يستمر في تنفيذ واسترجاع ونقل أي احتياجات غب المعلومات، حتى تنفيذ الأمر غب الذي يجعل استئناف البرنامج الخاص بك في تلك المرحلة، يعيد هاندلسيبتيون التحكم إلى التعليمات البرمجية الخاصة بك على آلة الهدف. نقطة التوقف استخدم هذا البرنامج الفرعي المساعد لجعل البرنامج يحتوي على نقطة توقف. اعتمادا على حالة معينة، قد يكون هذا هو السبيل الوحيد ل غب للحصول على السيطرة. على سبيل المثال، إذا كان الجهاز المستهدف الخاص بك لديه نوع من زر المقاطعة، لن تحتاج إلى استدعاء هذا الضغط على زر المقاطعة نقل التحويلات إلى هاندلسيبتيون --- في الواقع، إلى غب. على بعض الأجهزة، ببساطة تلقي الأحرف على المنفذ التسلسلي قد يؤدي أيضا فخ مرة أخرى، في هذا الوضع، لا تحتاج إلى استدعاء نقطة توقف من البرنامج الخاص بك - ببساطة تشغيل الهدف البعيد من الدورة غب المضيف يحصل على السيطرة. الاتصال نقطة توقف إذا كان أي من هذه غير صحيح، أو إذا كنت تريد ببساطة للتأكد من توقف البرنامج الخاص بك في نقطة محددة سلفا لبدء جلسة تصحيح الأخطاء الخاصة بك. 16.3.2 ما يجب القيام به ل كعب يتم إنشاء البثور التصحيح التي تأتي مع غب حتى بنية رقاقة معينة، ولكن ليس لديهم أي معلومات حول بقية الجهاز الهدف التصحيح الخاص بك. أولا وقبل كل شيء تحتاج إلى معرفة كعب كيفية التواصل مع المنفذ التسلسلي. إنت جيتدبوغشار () اكتب هذا الروتين الفرعي لقراءة حرف واحد من المنفذ التسلسلي. قد تكون مماثلة ل جيتشار للنظام المستهدف الخاص بك يستخدم اسم مختلف للسماح لك للتمييز بين اثنين إذا كنت ترغب في ذلك. فواد بوتديبوشار (إنت) اكتب هذا الروتين الفرعي لكتابة حرف واحد إلى المنفذ التسلسلي. قد تكون مطابقة لبوتشار للنظام المستهدف الخاص بك يستخدم اسم مختلف للسماح لك للتمييز بين اثنين إذا كنت ترغب في ذلك. إذا كنت تريد أن يكون غب قادرا على إيقاف البرنامج أثناء تشغيله، تحتاج إلى استخدام برنامج تشغيل تسلسلي يحركه المقاطعة، وترتيب لتوقف عندما يتلقى C (003. الطابع التحكم C). هذا هو الحرف الذي يستخدم غب ليقول النظام البعيد لوقف. الحصول على الهدف التصحيح للعودة الوضع المناسب ل غب ربما يتطلب تغييرات على كعب القياسية طريقة سريعة وقذرة واحدة فقط لتنفيذ تعليمات نقطة توقف (الجزء القذر هو أن غب تقارير سيغراب بدلا من سيجينت). الروتينات الأخرى التي تحتاج إلى توفير هي: فواد إكسبتيونثاندلر (إنت إستابليكنبر. فواد إكسبتيونستريس) اكتب هذه الوظيفة لتثبيت أوبتيونستريس في الجداول معالجة استثناء. تحتاج إلى القيام بذلك لأن كعب ليس لديه أي طريقة لمعرفة ما هي الجداول التعامل مع استثناء على النظام المستهدف الخاص بك مثل (على سبيل المثال، قد يكون جدول المعالجات في روم، تحتوي على إدخالات التي تشير إلى جدول في ذاكرة الوصول العشوائي). الاستثناء هو رقم الاستثناء الذي يجب تغييره بمعنى يعتمد على العمارة (على سبيل المثال، قد تمثل الأرقام المختلفة الانقسام بمقدار الصفر، والوصول غير المنحرف، وما إلى ذلك). عند حدوث هذا الاستثناء، يجب نقل عنصر التحكم مباشرة إلى إكسكتيونادريس. ويجب أن تكون حالة المعالج (كومة، وسجلات، وما إلى ذلك) كما هو الحال عندما يحدث استثناء المعالج. حتى إذا كنت ترغب في استخدام تعليمات القفز للوصول إلى إكسبريستادريس. ينبغي أن يكون قفزة بسيطة، وليس القفز إلى الروتين الفرعي. بالنسبة إلى 386، يجب تثبيت أوبتيونادريس كبوابة المقاطعة بحيث تكون المقاطعات ملثمين أثناء تشغيل المعالج. يجب أن تكون البوابة على مستوى الامتياز 0 (المستوى الأكثر تميزا). سبارك و 68k البوق قادرون على قناع المقاطعات أنفسهم دون مساعدة من إكسكتيونهاندلر. إفراغ فلوشيكاش () على سبارك و سباركليت فقط، اكتب هذا الروتين الفرعي لمسح ذاكرة التخزين المؤقت للتعليم، إن وجدت، على الجهاز المستهدف. إذا لم يكن هناك ذاكرة التخزين المؤقت تعليمات، قد يكون هذا الروتين الفرعي لا المرجع. على الأجهزة المستهدفة التي لديها مخابئ التعليمات، غب يتطلب هذه الوظيفة للتأكد من أن حالة البرنامج الخاص بك هو مستقر. يجب أن تتأكد أيضا من توفر هذه المكتبة الروتينية: فواد ميمسيت (فواد، إنت، إنت) هذا هو ميمسيت وظيفة المكتبة القياسية التي تحدد مساحة الذاكرة لقيمة معروفة. إذا كان لديك أحد الإصدارات المجانية من libc. a. ميمسيت يمكن العثور عليها هناك خلاف ذلك، يجب عليك إما الحصول عليه من الشركة المصنعة للجهاز، أو الكتابة الخاصة بك. إذا كنت لا تستخدم مترجم غنو C، قد تحتاج إلى بروتوكولات فرعية مكتبة قياسية أخرى، وهذا يختلف من كعب واحد إلى آخر، ولكن بشكل عام من المرجح أن تستخدم البذرة أي من فرعي المكتبة العامة المشتركة التي تقوم غك بإنشاء التعليمات البرمجية المضمنة. ولكن إذا قبل استدعاء سيتدبوغترابس. يمكنك تعيينه للإشارة إلى وظيفة في البرنامج الخاص بك، وتسمى هذه الوظيفة عندما يستمر غب بعد التوقف على فخ (على سبيل المثال، خطأ حافلة). وتسمى الدالة المشار إليها باستثناء هوك بمعلمة واحدة: إنت وهو رقم الاستثناء. تجميع وربط معا: البرنامج الخاص بك، كعب التصحيح غب للعمارة الهدف الخاص بك، و سوبروتينس دعم. تأكد من وجود اتصال تسلسلي بين الجهاز المستهدف ومضيف غب وتحديد المنفذ التسلسلي على المضيف. قم بتنزيل البرنامج الخاص بك إلى الجهاز المستهدف (أو احصل عليه هناك بأي وسيلة توفرها الشركة المصنعة)، وبدء تشغيله. لبدء تصحيح الأخطاء عن بعد، قم بتشغيل غب على الجهاز المضيف، وحدد كملف قابل للتنفيذ البرنامج الذي يتم تشغيله في الجهاز البعيد. هذا يخبر غب كيفية العثور على البرامج الخاصة بك رموز ومحتويات النص النقي. إنشاء الاتصال باستخدام الأمر عن بعد الهدف. حجته تحدد كيفية التواصل مع الجهاز الهدف - إما عن طريق ديفيسنام تعلق على خط تسلسلي مباشر، أو منفذ تكب (عادة إلى ملقم المحطة الطرفية التي بدورها لديها خط تسلسلي إلى الهدف). على سبيل المثال، لاستخدام خط تسلسلي متصل بالجهاز المسمى ديفتيب. لاستخدام اتصال تكب، استخدم وسيطة لمضيف النموذج: بورت. على سبيل المثال، للاتصال المنفذ 2828 على ملقم المحطة الطرفية المسمى ميفارمز. إذا كان الهدف البعيد يعمل بالفعل على نفس الجهاز مثل جلسة مصحح الأخطاء (على سبيل المثال، محاكي الهدف الذي يتم تشغيله على المضيف نفسه)، فيمكنك حذف اسم المضيف. على سبيل المثال، للاتصال المنفذ 1234 على الجهاز المحلي: لاحظ أن القولون لا يزال مطلوبا هنا. الآن يمكنك استخدام جميع الأوامر المعتادة لفحص وتغيير البيانات وخطوة ومواصلة البرنامج البعيد. لاستئناف البرنامج البعيد ووقف تصحيح الأخطاء، استخدم الأمر ديتاش. كلما غب ينتظر البرنامج البعيد، إذا قمت بكتابة حرف المقاطعة (في كثير من الأحيان C-C)، يحاول غب لوقف البرنامج. هذا قد أو قد لا تنجح، اعتمادا جزئيا على الأجهزة والبرامج التسلسلية التي يستخدمها النظام البعيد. إذا قمت بكتابة حرف المقاطعة مرة أخرى، يعرض غب هذه المطالبة: إذا قمت بكتاب y. غب يتخلى عن جلسة تصحيح الأخطاء عن بعد. (إذا قررت أنك تريد إعادة المحاولة لاحقا، يمكنك استخدام جهاز التحكم عن بعد الهدف مرة أخرى للاتصال مرة أخرى.) إذا قمت بكتابة n. غب يعود إلى الانتظار. يرجى إرسال استفسارات فسف أمبير غنو أمبير الأسئلة ل gnugnu. org. هناك أيضا طرق أخرى للاتصال فسف. يتم الحفاظ على هذه الصفحات من قبل مطوري غب. كوبيرايت فري سوفتوار فونداتيون، Inc. 59 تيمبل بلاس - سويت 330، بوسطن، ما 02111، أوسا. ويسمح بالنسخ الحرفي وتوزيع هذه المادة بأكملها في أي وسيط، بشرط الحفاظ على هذا الإشعار. تم إنشاء هذه الوثيقة من قبل مدير غب في مارس 29، 2002 باستخدام texi2htmlFor تصحيح تطبيقات الروبوت مع غب أريد استخدام إصدار مستقل من غب مباشرة على جهاز الروبوت. هل هناك أي إصدار ثنائي ما قبل بنيت من غب لالروبوت متاح لاحظ أن أنا أبحث عن النسخة غب الكامل لالروبوت، وليس غبسيرفر. الخلفية: وأنا أعلم أن ندك الروبوت يتضمن غبسيرفر، ولكن إذا كنت لا تصحيح البرامج الخاصة بك لديك شفرة المصدر لإعداد غبسيرفر و غب المضيف الجزء هو خرافية معقدة. حاولت ذلك وقتا طويلا ولكن الآن أنا فعلت معها - أنه يضيف الكثير من التعقيدات والمزالق لعملية التصحيح كلها. وعلاوة على ذلك حاولت بناء غب لوحدتي باستخدام مستقل-تولشين التي تم إنشاؤها بواسطة الروبوت-ندك - ولكن عملية ث فشل بسبب أخطاء التعليمات البرمجية. سئل 22 يناير 13 في 15:49

No comments:

Post a Comment