
Procedura কী?
Procedura একটি এজেন্টিক 3D মডেলিং পাইপলাইন, যা একটি টেক্সট প্রম্পটকে সম্পাদনযোগ্য প্রোসিডিউরাল অ্যাসেম্বলিতে রূপান্তর করে। শুধু পয়েন্ট ক্লাউড বা ত্রিভুজ মেশ তৈরি করার পরিবর্তে, এটি একটি প্যারামেট্রিক OpenSCAD প্রোগ্রাম লিখে, যার নামযুক্ত অংশগুলো টাইপযুক্ত মেটের মাধ্যমে সংযুক্ত থাকে। আপনি সোর্স পরিদর্শন করতে, সম্পাদনা করতে এবং আবার কম্পাইল করতে পারবেন।
সিস্টেমটি একটি ফ্রোজেন বৃহৎ ভাষা মডেল ব্যবহার করে এবং কোনো বিশেষায়িত 3D প্রশিক্ষণের প্রয়োজন হয় না। একটি রান শুধু টেক্সট দিয়ে শুরু হতে পারে, বিদ্যমান রেফারেন্স ছবি পুনর্গঠন করতে পারে, অথবা আলাদাভাবে কনফিগার করা ইমেজ মডেলের মাধ্যমে একটি রেফারেন্স তৈরি করতে পারে।
Procedura --paint দিয়ে প্রতিটি অংশে আলাদা PBR উপকরণ নির্ধারণ করতে পারে এবং --motion ও --motion-urdf দিয়ে আর্টিকুলেটেড অবজেক্ট OpenUSD ও URDF-এ এক্সপোর্ট করতে পারে।
প্রধান বৈশিষ্ট্য
- সম্পাদনযোগ্য প্রোসিডিউরাল আউটপুট: কম্পাইল করা জ্যামিতির পাশাপাশি OpenSCAD সোর্স কোড তৈরি করে।
- অংশভিত্তিক জেনারেশন: একটি অবজেক্টের পরিকল্পনা করে এবং তার নামযুক্ত উপাদানগুলো ধাপে ধাপে তৈরি করে।
- রেফারেন্স-ইমেজ পুনর্গঠন: বিদ্যমান ছবি গ্রহণ করে এবং উল্লেখযোগ্যভাবে উন্নত সাদৃশ্য প্রদান করে।
- 3D ফিডব্যাক: প্রতিটি নতুন অংশ তৈরির আগে বর্তমান বিল্ড রেন্ডার করতে পারে।
- অ্যাসেম্বলি-সচেতন মডেলিং: শেয়ার্ড-নমিনাল পেগ, সকেট, বোল্ট প্যাটার্ন ও স্ন্যাপের মতো মেটিং বৈশিষ্ট্য সমর্থন করে।
- পুনরাবৃত্তিমূলক পরিমার্জন: খসড়া উন্নত করতে রেন্ডার, সমালোচনা, প্যাচ ও গেট চক্র ব্যবহার করে।
- উপকরণ: একটি ভিশন-ভিত্তিক ধাপ প্রতিটি অংশে রং, মেটালনেস ও রাফনেস নির্ধারণ করতে পারে।
- আর্টিকুলেশন: গতি পরিকল্পনা করতে, OpenUSD ও URDF ফাইল এক্সপোর্ট করতে এবং ঐচ্ছিকভাবে NVIDIA Isaac Sim-এ পদার্থবিদ্যা যাচাই করতে পারে।
- ট্রেসযোগ্য রান: প্রম্পট, উত্তর, টুল কল, গেট সিদ্ধান্ত, মধ্যবর্তী রেন্ডার ও সম্পাদনা সংরক্ষণ করে।
- Web Studio: রান কম্পোজ করা এবং সেগুলোর আর্টিফ্যাক্ট পরিদর্শনের জন্য একটি ব্রাউজার ইন্টারফেস প্রদান করে।
পূর্বশর্ত ও ইনস্টলেশন
রিপোজিটরি ক্লোন করে এর ডিপেন্ডেন্সি ইনস্টলার চালান:
git clone git@github.com:SpatiaOS/Procedura.git
cd Procedura
bash scripts/install-deps.sh
ইনস্টলারটি Bun 1.3 বা পরবর্তী সংস্করণ, প্রজেক্ট প্যাকেজ, Manifold-সক্ষম OpenSCAD স্ন্যাপশট, Blender এবং একটি প্রাথমিক .env ফাইল সেটআপ করে। ডিফল্টভাবে Bun ~/.bun-এর অধীনে, OpenSCAD ~/opt/openscad-এর অধীনে এবং Blender ~/opt/blender/-এর অধীনে রাখা হয়।
স্ক্রিপ্টটি বারবার চালানো নিরাপদ। ইতিমধ্যে কার্যকর উপাদানগুলো অপরিবর্তিত থাকে। ডিপেন্ডেন্সি পরিদর্শন, Blender বাদ দেওয়া বা অন্য ইনস্টলেশন প্রিফিক্স বেছে নিতে এর ঐচ্ছিক মোড ব্যবহার করুন:
bash scripts/install-deps.sh --check
bash scripts/install-deps.sh --no-blender
PREFIX=/opt bash scripts/install-deps.sh
--check কোনো কিছু ইনস্টল না করে অনুপস্থিত প্রয়োজনীয়তা জানায়। --no-blender প্রায় 350 MB-র Blender ডাউনলোড বাদ দেয়, যদিও রেন্ডারিং ও ফিডব্যাকের বেশ কিছু বৈশিষ্ট্যের জন্য Blender প্রয়োজন।
OpenSCAD-কে Manifold ব্যাকএন্ড সমর্থন করতে হবে। পুরোনো ডিস্ট্রিবিউশন প্যাকেজগুলো CGAL-এ ফিরে যেতে পারে এবং গতি বহুগুণ কমে যেতে পারে। Procedura স্টার্টআপের সময়
--backend-এর উপস্থিতি যাচাই করে এবং সাধারণত অসামঞ্জস্যপূর্ণ বিল্ড ব্যবহার করতে অস্বীকার করে। আপনি ইচ্ছাকৃতভাবে এই ধীরগতি মেনে নিলে তবেইPROCEDURA_ALLOW_CGAL_OPENSCAD=1সেট করুন।
ইনস্টলার NVIDIA Isaac Sim ইনস্টল করে না। মোশন ওয়ার্কফ্লোর সঙ্গে যুক্ত পদার্থবিদ্যা যাচাইয়ের জন্যই কেবল Isaac Sim প্রয়োজন; Procedura-এর বাকি অংশ এটি ছাড়াই কাজ করে। ইনস্টলার বিদ্যমান .env ফাইলও সংরক্ষণ করে।
একটি LLM এন্ডপয়েন্ট কনফিগার করুন
Procedura-তে API কী বা হোস্টেড ইনফারেন্স ব্যাকএন্ড কোনোটিই অন্তর্ভুক্ত নেই। তৈরি হওয়া .env ফাইল খুলে একটি এন্ডপয়েন্ট ও কী দিন:
OPENAI_API_KEY=sk-...
OPENAI_BASE_URL=https://api.openai.com/v1
PROCEDURA_MODEL=gpt-5.2
এন্ডপয়েন্টটিকে অবশ্যই সার্ভার-সেন্ট ইভেন্টসহ POST {base}/chat/completions সমর্থন করতে হবে। সামঞ্জস্যপূর্ণ বিকল্পের মধ্যে OpenAI API, OpenRouter, কর্পোরেট গেটওয়ে অথবা vLLM, Ollama কিংবা LM Studio-ভিত্তিক স্থানীয় সার্ভার থাকতে পারে।
মডেল নির্বাচন একটি স্ট্রিং, তাই কনফিগার করা এন্ডপয়েন্টে পরিবেশিত যেকোনো মডেল আইডেন্টিফায়ার ব্যবহার করতে পারেন। পরীক্ষিত প্রিসেট ও মডেল-রেজোলিউশন নিয়ম src/config/models.ts-এ নথিভুক্ত আছে।
নেটিভ Gemini ট্রান্সপোর্ট ব্যবহার করুন
নেটিভ GenAI পাথের মাধ্যমে Gemini ব্যবহার করতে GEMINI_API_KEY ও GEMINI_BASE_URL সেট করুন, তারপর মডেল আইডেন্টিফায়ারের আগে gemini: যোগ করুন:
PROCEDURA_MODEL=gemini:gemini-3-pro-preview
এই পাথটি thinkingConfig এবং ফার্স্ট-ক্লাস থট পার্টের মতো নেটিভ বৈশিষ্ট্য উন্মুক্ত করে।
ঐচ্ছিক ইমেজ জেনারেশন
আপনি স্পষ্টভাবে কনফিগার বা অনুরোধ না করলে Procedura কোনো ইমেজ API কল করে না। জেনারেট করা রেফারেন্স ছবি সক্রিয় করতে একটি ইমেজ মডেল যোগ করুন:
PROCEDURA_IMAGE_MODEL=gpt-image-1
ইমেজ মডেলটি OPENAI_BASE_URL ও OPENAI_API_KEY পুনর্ব্যবহার করে। --image বা কনফিগার করা ইমেজ মডেল ছাড়া রানগুলো শুধু টেক্সটভিত্তিক থাকে এবং নীরবে ইমেজ-জেনারেশন খরচ তৈরি করে না।
আপনার প্রথম মডেল তৈরি করুন
আউটপুট ডিরেক্টরি আবশ্যক। -o বা --output দিয়ে এটি দিন, তারপর একটি টেক্সট প্রম্পট প্রদান করুন:
bun run scripts/procedura.ts -o outputs/daybed \
--prompt "a brutalist brass daybed with tapered legs"
এই ডিফল্ট ওয়ার্কফ্লো উপাদানগুলোর পরিকল্পনা করে, একবারে একটি করে তৈরি করে এবং সম্পূর্ণ আকৃতিকে পরিমার্জন করে। এটি শুধু টেক্সট-ভিত্তিক, কোনো ইমেজ API ব্যবহার করে না এবং প্রতি-অংশের খসড়া লুপে Blender চালায় না। এটি ব্যবহারযোগ্য কনফিগারেশনগুলোর মধ্যে সবচেয়ে কম খরচেরটি।
সমর্থিত সব অপশন দেখতে চালান:
bun run scripts/procedura.ts --help
রেফারেন্স ছবি দিয়ে বিশ্বস্ততা বাড়ান
প্রকল্পে চিহ্নিত বিশ্বস্ততা বৃদ্ধির ক্ষেত্রে একটি রেফারেন্স ছবি সরবরাহ করাই সবচেয়ে বড় একক উন্নতি। আপনার কাছে থাকা একটি ছবির সঙ্গে বর্ণনামূলক প্রম্পট দিন:
bun run scripts/procedura.ts -o outputs/daybed \
--image ref.png \
--prompt "a brass daybed with tapered legs"
বিকল্পভাবে, একটি ইমেজ মডেলের নাম দিয়ে এই রানেই রেফারেন্স তৈরি করতে পারেন:
bun run scripts/procedura.ts -o outputs/daybed \
--image-model gpt-image-1 \
--prompt "a brass daybed with tapered legs"
শেল-এ উদ্ধৃত করা অসুবিধাজনক এমন দীর্ঘ বর্ণনার জন্য প্রম্পটটি একটি ফাইলে সংরক্ষণ করুন:
bun run scripts/procedura.ts -o outputs/daybed \
--prompt-file my_prompt.txt
সম্পূর্ণ মান-উন্নয়ন পাইপলাইন চালান
একটি পূর্ণ রান রেফারেন্স পুনর্গঠন, ভিজ্যুয়াল ফিডব্যাক, অ্যাসেম্বলি বৈশিষ্ট্য, উপকরণ, গতি এবং দীর্ঘতর পরিমার্জন বাজেট একত্র করতে পারে। বড় পরিকল্পনার জন্য দীর্ঘ LLM সীমা প্রয়োজন হতে পারে, তাই আগে উভয় টাইমআউট ভেরিয়েবলের মান বাড়ান:
export PROCEDURA_LLM_TIMEOUT_MS=1800000
export PROCEDURA_LLM_DEADLINE_MS=1800000
bun run scripts/procedura.ts -o outputs/gripper \
--image gripper_ref.png \
--3d-feedback \
--assembly \
--paint \
--motion --motion-urdf \
--max-steps 12 \
--prompt "a two-finger parallel robot gripper"
প্রতিটি অপশনের আলাদা ভূমিকা রয়েছে:
--3d-feedbackপ্রতিটি অংশ তৈরির আগে জেনারেটরকে বর্তমান অ্যাসেম্বলির রেন্ডার করা দৃশ্য দেয়। এতে প্রতি অংশে একটি অতিরিক্ত Blender পাস যোগ হয়।--assemblyশুধু ওভারল্যাপ করা জ্যামিতির ওপর নির্ভর না করে প্রকৃত সংযোগ-ইন্টারফেস যোগ করে।--paintনামযুক্ত অংশগুলোতে PBR উপকরণের বৈশিষ্ট্য নির্ধারণ করতে একটি ভিশন কল ব্যবহার করে।--motionআর্টিকুলেশন পরিকল্পনা করে এবং OpenUSD ডেটা রপ্তানি করে।--motion-urdfঅতিরিক্তভাবে URDF ফাইল এবং প্রতি-লিঙ্ক মেশ তৈরি করে।--max-steps 12সর্বোচ্চ ১২টি পরিমার্জন চক্র চালানোর অনুমতি দেয়। প্রতিটি চক্রে রেন্ডার, সমালোচনা, প্যাচ এবং গেট অপারেশন সম্পন্ন হয় এবং দুটি LLM কল ব্যবহৃত হয়।
দীর্ঘ পরিকল্পনা কল ইঙ্গিত করতে পারে যে পাইপলাইনটি গুরুত্বপূর্ণ কাজ করছে। README-তে PROCEDURA_MAX_PARTS সীমিত করার বদলে টাইমআউট বাড়ানোর পরামর্শ দেওয়া হয়েছে, কারণ অংশের সংখ্যা সীমিত করলে গতি বাড়ানোর বিনিময়ে মডেলের মান কমে।
পুনরায় চালান, নতুন খসড়া তৈরি করুন বা পরিমার্জন এড়িয়ে যান
Procedura একটি বিদ্যমান আউটপুট ডিরেক্টরিতে পরিমার্জন লুপ চালিয়ে যেতে পারে। প্রম্পট বাদ দিয়ে নতুন ধাপের বাজেট নির্ধারণ করুন:
bun run scripts/procedura.ts -o outputs/daybed --max-steps 12
বিদ্যমান খসড়া বাতিল করে আবার তৈরি করতে --redo যোগ করুন:
bun run scripts/procedura.ts -o outputs/daybed \
--prompt "a brutalist brass daybed" \
--redo
শুধু খসড়াটি চাইলে --no-refine ব্যবহার করুন। Procedura সেই খসড়াকে চূড়ান্ত আউটপুট ফাইলে উন্নীত করে। পুরোনো মনোলিথিক ওয়ার্কফ্লোর জন্য --one-shot পরিকল্পনা ধাপ ছাড়াই একটি জেনারেশন কল চালায় এবং একটি রেফারেন্স ছবি প্রয়োজন:
bun run scripts/procedura.ts -o outputs/daybed \
--one-shot \
--image ref.png \
--prompt "a brutalist brass daybed"
আউটপুট ডিরেক্টরি বুঝে নিন
একটি সম্পূর্ণ রানে নিম্নলিখিত আর্টিফ্যাক্ট থাকতে পারে:
image.png: সরবরাহ করা বা তৈরি করা রেফারেন্স ছবি।plan.json: পরিকল্পিত অংশের কাঠামো।_parts/NN_name/: ক্রমবর্ধমান তৈরির জন্য প্রতি-অংশের আর্টিফ্যাক্ট।draft.scadএবংdraft.obj: প্রাথমিক প্রক্রিয়াগত সোর্স এবং কম্পাইল করা মেশ।final.scadএবংfinal.obj: পরিমার্জিত ডেলিভারেবল।final_summary.txt: সমাপ্তির মূল্যায়ন এবং সরবরাহ করা সংযোগ-সংক্রান্ত তথ্য।preview_final/: চূড়ান্ত মেশের Blender অ্যাম্বিয়েন্ট-অক্লুশন রেন্ডার।final_materials.json:--paintদ্বারা তৈরি প্রতি-অংশের রং, মেটালনেস এবং রাফনেস।final_painted.scad,final_painted.objএবংfinal_painted.mtl: রং করা মডেলের অ্যাসেট।preview_painted/: রং করা মডেলের PBR Cycles রেন্ডার।motion/final_motion.usda: OpenUSD আর্টিকুলেশন আউটপুট।motion/urdf/এবংmotion/links/: অনুরোধ করা হলে URDF ডেটা এবং প্রতি-লিঙ্ক মেশ।_trajectory/procedura-id.jsonl: প্রম্পট, উত্তর, টুল কল এবং গেটের সিদ্ধান্ত।_refine_steps/step_NNN/: প্রতিটি পরিমার্জন চক্রের রেন্ডার, নির্ণয়, সম্পাদনা এবং কম্পাইলেশনের ডেটা।
Procedura দ্বারা লেখা প্রতিটি OBJ ফাইল ইউনিট বাউন্ডিং বক্সে স্বাভাবিকীকৃত হয়। STL রপ্তানি ঐচ্ছিক এবং --export-stl দিয়ে সক্রিয় করা যায়।
স্বাধীনভাবে উপকরণ বা গতি পুনরায় চালান
পেইন্টিং এবং মোশন একটি সম্পূর্ণ রান ডিরেক্টরিতে কাজ করে, তাই জ্যামিতি পুনরায় তৈরি না করে অন্য মডেল দিয়ে বা ব্যর্থতার পর যেকোনো ধাপ পুনরাবৃত্তি করতে পারেন:
bun run scripts/paint.ts RUN_DIRECTORY --model MODEL_KEY --refine-steps 2
bun run scripts/motion.ts RUN_DIRECTORY --model MODEL_KEY --urdf --no-validate
ঐচ্ছিক --no-validate ফ্ল্যাগ মোশন ভ্যালিডেশন এড়িয়ে যায়। Isaac Sim উপলভ্য না থাকলে বা শুধু রপ্তানি করা আর্টিকুলেশন ফাইল প্রয়োজন হলে এটি কার্যকর।
ডেটাসেট প্রক্রিয়া করুন
একাধিক কেসের জন্য JSON Lines প্রম্পট ফাইলসহ ব্যাচ স্ক্রিপ্ট ব্যবহার করুন:
bun run scripts/batch.ts \
--prompts cases.jsonl --images \
--incremental \
--motion --validate --urdf \
--max-steps 3 \
--parallel 2 \
--out-root outputs/batch_v1
পেপারের ওয়ার্কফ্লোটি একই সঙ্গে আকৃতি ও আর্টিকুলেশন তৈরি করে, এরপর প্রতিটি সম্পূর্ণ কেস আলাদাভাবে পেইন্ট করে। ফলে পেইন্টিং ব্যর্থ হলেও সম্পূর্ণ হওয়া জ্যামিতি অকার্যকর হয় না:
bun run scripts/paint.ts outputs/batch_v1/CASE_ID
--motion --validate ব্যবহার করার সময় প্যারালেলিজম প্রায় দুইয়ের কাছাকাছি রাখুন, কারণ একাধিক হেডলেস Isaac Sim ইনস্ট্যান্স GPU মেমোরি নিঃশেষ করে দিতে পারে। শুধু রিফাইনমেন্টের ব্যাচে প্রায় 8 থেকে 12 জন কর্মী সহনীয় হতে পারে, তবে প্রতিটি চক্রে Blender চালু হয়, তাই API রেট লিমিটের আগেই মেমোরি সীমাবদ্ধতা হয়ে দাঁড়াতে পারে।
রান আর্টিফ্যাক্ট তুলনা করুন
Procedura-তে একাধিক কনফিগারেশনের রেন্ডার, সোর্স ফাইল, মেট্রিক্স এবং ট্রাজেক্টরি পাশাপাশি দেখার জন্য একটি স্থানীয় ফলাফল সার্ভার রয়েছে:
bun run scripts/results-server.ts \
--root a=outputs/run_a \
--root b=outputs/run_b
প্রম্পট, ধাপভিত্তিক মডেল, রিফাইনমেন্ট বাজেট, অথবা 3D ফিডব্যাক ও অ্যাসেম্বলি-সচেতন জেনারেশনের মতো অপশন পরীক্ষা করার সময় এটি উপকারী।
Procedura Studio ব্যবহার করুন
Studio একই পাইপলাইনের জন্য একটি ওয়েব ফ্রন্ট এন্ড। এতে আপনি একটি প্রম্পট, ঐচ্ছিক রেফারেন্স ছবি, প্রিসেট এবং প্রতিটি ধাপের নিয়ন্ত্রণ দিয়ে একটি রান সাজাতে পারবেন। রান চলাকালীন অংশগুলো তৈরি হতে দেখতে এবং পরিকল্পনা, অংশের আর্টিফ্যাক্ট, রিফাইনমেন্টের ইতিহাস, চূড়ান্ত 3D মেশ, ম্যাটেরিয়াল ও আর্টিকুলেশন পরিদর্শন করতে পারবেন।
cd web
bun install
bun run start
http://localhost:8080 খুলুন। Studio রিপোজিটরি রুট থেকে CLI চালু করে এবং একই .env পড়ে, তাই আলাদা API কনফিগারেশনের প্রয়োজন হয় না।
উন্নত পরামর্শ
- সাশ্রয়ীভাবে শুরু করুন, পরে মানোন্নয়নের ফিচার যোগ করুন। ছবি তৈরি, ভিজ্যুয়াল ফিডব্যাক, পেইন্টিং বা মোশন চালু করার আগে ডিফল্ট টেক্সট-অনলি রান দিয়ে আপনার এন্ডপয়েন্ট ও প্রম্পট যাচাই করুন।
- সম্ভব হলে বাস্তব রেফারেন্স ব্যবহার করুন। প্রকল্পটি
--image-কে বিশ্বস্ততা বাড়ানোর সবচেয়ে বড় একক উন্নতি হিসেবে চিহ্নিত করে। - ধাপভেদে মডেল ওভাররাইড করুন। পৃথক ধাপের জন্য ভিন্ন এন্ডপয়েন্ট মডেল কী নির্বাচন করতে
--agent-model,--scad-model,--paint-modelঅথবা--motion-modelব্যবহার করুন। - সফল জ্যামিতি সংরক্ষণ করুন। ব্যর্থতার কারণে পুরো বিল্ড আবার চালাতে না হলে পেইন্টিং ও মোশনকে আলাদা পোস্ট-প্রসেসিং ধাপ হিসেবে চালান।
- প্যারালেল রান চলাকালীন মেমোরি পর্যবেক্ষণ করুন। আপনার API এন্ডপয়েন্ট আরও বেশি সমসাময়িক অনুরোধ সামলাতে পারলেও Blender ও Isaac Sim উল্লেখযোগ্য পরিমাণ মেমোরি ব্যবহার করতে পারে।
- ডিবাগ করার সময় ট্রাজেক্টরি পরিদর্শন করুন। JSONL ট্রাজেক্টরি এবং প্রতিটি ধাপের রিফাইনমেন্ট ডিরেক্টরিগুলোতে প্রম্পট, মডেলের উত্তর, সম্পাদনা, কম্পাইলারের ফলাফল এবং গেটের সিদ্ধান্ত দেখা যায়।
- OpenSCAD ব্যাকএন্ডের সমর্থন নিশ্চিত করুন। জেনারেশন আটকে গেছে বলে মনে হলে যাচাই করুন যে Procedura পুরোনো CGAL-only বিল্ডের বদলে Manifold-সক্ষম OpenSCAD ব্যবহার করছে।
উপসংহার
Procedura ভাষা-মডেলভিত্তিক পরিকল্পনাকে প্রোসিডিউরাল CAD, মেশ কম্পাইলেশন, ভিজ্যুয়াল রিফাইনমেন্ট, ম্যাটেরিয়াল এবং ঐচ্ছিক আর্টিকুলেশনের সঙ্গে একত্র করে। কনফিগার করা একটি এন্ডপয়েন্ট ও সহজ টেক্সট প্রম্পট দিয়ে শুরু করুন, এরপর আপনার মানের প্রয়োজন বাড়ার সঙ্গে রেফারেন্স ছবি, 3D ফিডব্যাক, অ্যাসেম্বলি ফিচার, পেইন্টিং এবং মোশন যোগ করুন। প্রধান ডেলিভারেবল সম্পাদনাযোগ্য সোর্স কোড হওয়ায়, জেনারেশনের পরও তৈরি বস্তুগুলো পরিদর্শন ও পুনর্ব্যবহার করা যায়।
Procedura MIT লাইসেন্সের অধীনে প্রকাশিত। প্রকল্পের ডকুমেন্টেশন, পেপার এবং অতিরিক্ত তথ্য Procedura প্রকল্পের পৃষ্ঠায় পাওয়া যাবে।
