═══ 1. Welcome ═══ ═══ Welcome ═══ ═══ Welcome ═══ ═══ 1.1. Legal Notices ═══ ═══ Notices ═══ ═══ Trademarks ═══ ═══ 1.2. Acknowledgments ═══ ═══ 1.3. About This Book ═══ ═══ How this Book is Organized ═══ ═══ Intended Audience ═══ ═══ Related Information ═══ ═══ 2. What is VisualAge? ═══ ═══ Description ═══ ═══ Benefits of VisualAge ═══ ═══ Key Concepts ═══ ═══ 3. Building Your First VisualAge Application ═══ ═══ What You Will Achieve ═══ ═══ Starting VisualAge ═══ ═══ Creating an Application ═══ ═══ Using the Composition Editor ═══ ═══ Adding Parts ═══ ═══ Connecting the Parts ═══ ═══ Running and Distributing Your Application ═══ ═══ Extra Practice ═══ ═══ 4. Exploring VisualAge Application Development ═══ ═══ 4.1. Touring the Visual Tools ═══ ═══ 4.1.1. The Composition Editor ═══ ═══ Introduction ═══ ═══ Parts Palette ═══ ═══ Free-Form Surface ═══ ═══ Tool Bar ═══ ═══ Visual Tool Symbols ═══ ═══ 4.1.2. The Script Editor ═══ ═══ Introduction ═══ ═══ Tool Bar ═══ ═══ Script List ═══ ═══ Script Language Pane ═══ ═══ Visual Tool Symbols ═══ ═══ 4.2. Visual Construction Fundamentals ═══ ═══ 4.2.1. Using Parts ═══ ═══ Adding Parts ═══ ═══ Selecting Parts ═══ ═══ Manipulating Parts ═══ ═══ Arranging Parts ═══ ═══ Changing Settings ═══ ═══ Tearing Off an Attribute ═══ ═══ What to Watch For ═══ ═══ 4.2.2. Using Connections ═══ ═══ Connection Types ═══ ═══ Making Connections ═══ ═══ Parameters and Settings ═══ ═══ Manipulating Connections ═══ ═══ Changing the End Points ═══ ═══ What to Watch For ═══ ═══ 4.2.3. Correcting Mistakes ═══ ═══ 4.3. Constructing the User Interface ═══ ═══ 4.3.1. Adding Basic Visual Parts ═══ ═══ What You Will Achieve ═══ ═══ Adding the Parts ═══ ═══ Changing the Settings ═══ ═══ Making the Connections ═══ ═══ Extra Practice ═══ ═══ 4.3.2. Adding Window and Form Parts ═══ ═══ What You Will Achieve ═══ ═══ Creating the Reusable Part ═══ ═══ Creating the Secondary Window ═══ ═══ Setting the Tabbing Order ═══ ═══ Extra Practice ═══ ═══ 4.3.3. Adding Menu Parts ═══ ═══ What You Will Achieve ═══ ═══ Adding the Menus ═══ ═══ Adding the Menu Choices ═══ ═══ Menu Types ═══ ═══ Extra Practice ═══ ═══ 4.3.4. Adding Notebook Parts ═══ ═══ What You Will Achieve ═══ ═══ Adding the Notebook ═══ ═══ Adding Pages ═══ ═══ Extra Practice ═══ ═══ 4.4. Adding Database Support ═══ ═══ 4.4.1. Defining a Database Query ═══ ═══ What You Will Achieve ═══ ═══ Activating a Database Manager ═══ ═══ Creating an Access Set ═══ ═══ Creating a Query ═══ ═══ Using the SQL Editor ═══ ═══ 4.4.2. Using the Results of a Query ═══ ═══ What You Will Achieve ═══ ═══ Tearing Off Results ═══ ═══ Using Quick Forms ═══ ═══ Working with the Table Part ═══ ═══ Extra Practice ═══ ═══ 4.4.3. Advanced Query Techniques ═══ ═══ What You Will Achieve ═══ ═══ Sorting Result Table Rows ═══ ═══ Restricting Result Table Rows ═══ ═══ Nesting SELECT Statements ═══ ═══ Defining an UPDATE Statement ═══ ═══ Defining an INSERT Statement ═══ ═══ Defining a DELETE Statement ═══ ═══ Sharing SQL Statements ═══ ═══ 4.5. Extending Applications Using Scripts ═══ ═══ 4.5.1. Scripting Language Fundamentals ═══ ═══ Language Concepts ═══ ═══ Practicing ═══ ═══ Writing Simple Scripts ═══ ═══ Messages ═══ ═══ Blocks ═══ ═══ Common Errors ═══ ═══ 4.5.2. Using the Script Editor ═══ ═══ What You Will Achieve ═══ ═══ Creating a Script ═══ ═══ Shortcuts for Adding Statements ═══ ═══ Extra Practice ═══ ═══ What to Watch For ═══ ═══ 4.5.3. Event-to-Script Connections ═══ ═══ What You Will Achieve ═══ ═══ Creating the View ═══ ═══ Adding an Event-to-Script Connection ═══ ═══ Extra Practice ═══ ═══ What to Watch For ═══ ═══ 4.5.4. Attribute-to-Script Connections ═══ ═══ What You Will Achieve ═══ ═══ Changing the View ═══ ═══ Adding an Attribute-to-Script Connection ═══ ═══ Extra Practice ═══ ═══ What to Watch For ═══ ═══ 4.6. Creating Reusable Parts ═══ ═══ 4.6.1. Touring the Public Interface Editor ═══ ═══ Introduction ═══ ═══ Attributes ═══ ═══ Events ═══ ═══ Actions ═══ ═══ Generating Default Scripts ═══ ═══ Visual Tool Symbols ═══ ═══ 4.6.2. Creating Your First Reusable Part ═══ ═══ What You Will Achieve ═══ ═══ Creating a Nonvisual Part ═══ ═══ Designing the Part ═══ ═══ Defining the Attributes ═══ ═══ Defining the Scripts ═══ ═══ Generating Default Scripts ═══ ═══ Modifying Default Scripts ═══ ═══ Writing Your Own Script ═══ ═══ Using Your Nonvisual Part ═══ ═══ Extra Practice ═══ ═══ 4.7. Using Nonvisual Parts ═══ ═══ 4.7.1. Using Object Factories ═══ ═══ What You Will Achieve ═══ ═══ Adding the Parts ═══ ═══ Adding the Connections ═══ ═══ 4.7.2. Using Variables ═══ ═══ What You Will Achieve ═══ ═══ Creating the First Visual Part ═══ ═══ Adding a Second Visual Part ═══ ═══ Passing the Variable ═══ ═══ Extra Practice ═══ ═══ Update Customer Info Script ═══ ═══ 4.7.3. Deferring Changes to Parts ═══ ═══ Introduction ═══ ═══ Using Deferred Updates ═══ ═══ 4.8. Using Data Type Converters ═══ ═══ Introduction ═══ ═══ Basic Types ═══ ═══ Handling Errors ═══ ═══ General Advice ═══ ═══ 4.9. Adding Help To Your Application ═══ ═══ Introduction ═══ ═══ Creating the Help File ═══ ═══ Sample Help Source Code ═══ ═══ Connecting Help ═══ ═══ Extra Practice ═══ ═══ 4.10. Debugging the Application ═══ ═══ Introduction ═══ ═══ Examining Objects ═══ ═══ Using the Debugger ═══ ═══ Common Errors to Watch For ═══ ═══ 5. Packaging Your VisualAge Application ═══ ═══ What You Will Achieve ═══ ═══ Generating an Application ═══ ═══ Creating a Runtime Image ═══ ═══ Runtime System Setup ═══ ═══ 6. Advanced Topics ═══ ═══ 6.1. Adding Table Parts ═══ ═══ What You Will Achieve ═══ ═══ Database Setup ═══ ═══ Adding a Table Part ═══ ═══ Changing Table Attributes ═══ ═══ Connecting a Result Table ═══ ═══ Extra Practice ═══ ═══ 6.2. Adding Container Parts ═══ ═══ What You Will Achieve ═══ ═══ Adding the Container Part ═══ ═══ Adding Icon Gadget Parts to a Container ═══ ═══ Linking Icon Gadgets to Windows ═══ ═══ Extra Practice ═══ ═══ 6.3. Extending the Parts Palette ═══ ═══ What You Will Achieve ═══ ═══ Preparing Icons ═══ ═══ Adding a Category ═══ ═══ Adding a Part ═══ ═══ Deleting a Category or Part ═══ ═══ Empty Source Code File ═══ ═══ Resource File ═══ ═══ Module Definition File ═══ ═══ Make File ═══ ═══ 6.4. Sizing and Positioning Techniques ═══ ═══ What You Will Achieve ═══ ═══ Sizing the Window ═══ ═══ Ways to Adjust Parts ═══ ═══ Using the Size/Position Settings Page ═══ ═══ Chaining Parts Together ═══ ═══ Filling in the Center ═══ ═══ Grouping Parts Using Forms ═══ ═══ 6.5. Accessing External Functions ═══ ═══ 6.5.1. Accessing C and COBOL Functions ═══ ═══ What You Will Achieve ═══ ═══ CATM.C Source Code ═══ ═══ CATM.H Source Code ═══ ═══ CATM.DEF Source Code ═══ ═══ CATM.MAK Source Code ═══ ═══ ATM.CBL Source Code ═══ ═══ ATM.CPY Source Code ═══ ═══ ATM.DEF Source Code ═══ ═══ CBLMAKE.CMD Source Code ═══ ═══ Adding the Parts ═══ ═══ Connecting Parameters ═══ ═══ Extra Practice ═══ ═══ General Advice ═══ ═══ 6.5.2. Advanced C Function Calls ═══ ═══ What You Will Achieve ═══ ═══ CGRAPH.C Source Code ═══ ═══ CGRAPH.H Source Code ═══ ═══ CGRAPH.DEF Source Code ═══ ═══ CGRAPH.MAK Source Code ═══ ═══ Adding the Parts ═══ ═══ Understanding Record Structures ═══ ═══ Writing the Script ═══ ═══ Extra Practice ═══ ═══ 6.5.3. Building Your Own External Function Parts ═══ ═══ Introduction ═══ ═══ Using the Parser ═══ ═══ Working with Object Tables ═══ ═══ Calling Functions ═══ ═══ 6.6. Threads ═══ ═══ Why Use Threads? ═══ ═══ How Threads Work ═══ ═══ Using Threads ═══ ═══ Performance ═══ ═══ 6.7. National Language Support ═══ ═══ Introduction ═══ ═══ Translating Text Using the MRI Browser ═══ ═══ Creating the File ═══ ═══ Displaying Panel Text ═══ ═══ Displaying Messages ═══ ═══ Accessing the Text Using Constants ═══ ═══ Adding additional languages ═══ ═══ Country Information ═══ ═══ 7. Designing Effective VisualAge Applications ═══ ═══ Designing For a Single Purpose ═══ ═══ Identifying Reusable Parts ═══ ═══ Using Inheritance ═══ ═══ Using Abstract Classes ═══ ═══ Think Small ═══ ═══ 8. Tips for Better Performance ═══ ═══ Introduction ═══ ═══ Connections vs. Scripts ═══ ═══ Attribute-To-Script Connections ═══ ═══ 9. Managing Your VisualAge Application ═══ ═══ Introduction ═══ ═══ Creating VisualAge Applications ═══ ═══ Saving Your Work ═══ ═══ Recovering Lost Work ═══ ═══ Sharing Code With Other Developers ═══ ═══ Moving and Deleting Applications and Classes ═══ ═══ Team Development Issues ═══ ═══ 10. Using VisualAge Optional Features ═══ ═══ Introduction ═══ ═══ Communications ═══ ═══ Multimedia ═══ ═══ 11. Parts Reference ═══ ═══ 11.1. C External function ═══ ═══ C External function Description ═══ ═══ C External function Attributes ═══ ═══ C External function Actions ═══ ═══ C External function Events ═══ ═══ C External function Settings - DLL ═══ ═══ C External function Settings - Record ═══ ═══ C External function Settings - Prototypes ═══ ═══ C External function General Advice ═══ ═══ 11.2. Cascade Button ═══ ═══ Cascade Button Description ═══ ═══ Cascade Button Attributes ═══ ═══ Cascade Button Actions ═══ ═══ Cascade Button Events ═══ ═══ Cascade Button Settings - General ═══ ═══ Cascade Button Settings - Size/Position ═══ ═══ Cascade Button Settings - Font ═══ ═══ Cascade Button General Advice ═══ ═══ 11.3. COBOL External function ═══ ═══ COBOL External function Description ═══ ═══ COBOL External function Attributes ═══ ═══ COBOL External function Actions ═══ ═══ COBOL External function Events ═══ ═══ COBOL External function Settings - DLL ═══ ═══ COBOL External function Settings - Record ═══ ═══ COBOL External function Settings - Prototypes ═══ ═══ COBOL External function General Advice ═══ ═══ 11.4. Combo Box ═══ ═══ Combo Box Description ═══ ═══ Combo Box Attributes ═══ ═══ Combo Box Actions ═══ ═══ Combo Box Events ═══ ═══ Combo Box Settings - General ═══ ═══ Combo Box Settings - Size/Position ═══ ═══ Combo Box Settings - Font ═══ ═══ Combo Box General Advice ═══ ═══ 11.5. Container ═══ ═══ Container Description ═══ ═══ Container Attributes ═══ ═══ Container Actions ═══ ═══ Container Events ═══ ═══ Container Settings - General ═══ ═══ Container Settings - Size/Position ═══ ═══ Container Settings - View ═══ ═══ Container Settings - Selection ═══ ═══ Container Settings - Tree ═══ ═══ 11.5.1. Icon Gadget ═══ ═══ Icon Gadget Description ═══ ═══ Icon Gadget Attributes ═══ ═══ Icon Gadget Actions ═══ ═══ Icon Gadget Events ═══ ═══ Icon Gadget Settings - General ═══ ═══ 11.6. Database Query ═══ ═══ Database Query Description ═══ ═══ Database Query Attributes ═══ ═══ Database Query Actions ═══ ═══ Database Query Events ═══ ═══ Database Query Settings - SQL Query ═══ ═══ Database Query General Advice ═══ ═══ 11.6.1. Current Row ═══ ═══ Current Row Description ═══ ═══ Current Row Attributes ═══ ═══ 11.6.2. Query Result Table ═══ ═══ Query Result Table Description ═══ ═══ Query Result Table Attributes ═══ ═══ Query Result Table Actions ═══ ═══ Query Result Table General Advice ═══ ═══ 11.7. Drop-down List ═══ ═══ Drop-down List Description ═══ ═══ Drop-down List Attributes ═══ ═══ Drop-down List Actions ═══ ═══ Drop-down List Events ═══ ═══ Drop-down List Settings - General ═══ ═══ Drop-down List Settings - Size/Position ═══ ═══ Drop-down List Settings - Font ═══ ═══ Drop-down List General Advice ═══ ═══ 11.8. Form ═══ ═══ Form Description ═══ ═══ Form Attributes ═══ ═══ Form Actions ═══ ═══ Form Events ═══ ═══ Form Settings - General ═══ ═══ Form Settings - Size/Position ═══ ═══ Form Settings - Font ═══ ═══ 11.9. Group Box ═══ ═══ Group Box Description ═══ ═══ Group Box Attributes ═══ ═══ Group Box Actions ═══ ═══ Group Box Events ═══ ═══ Group Box Settings - General ═══ ═══ Group Box Settings - Size/Position ═══ ═══ Group Box Settings - Font ═══ ═══ 11.10. Label ═══ ═══ Label Description ═══ ═══ Label Attributes ═══ ═══ Label Actions ═══ ═══ Label Events ═══ ═══ Label Settings - General ═══ ═══ Label Settings - Size/Position ═══ ═══ Label Settings - Font ═══ ═══ Label General Advice ═══ ═══ 11.11. List ═══ ═══ List Description ═══ ═══ List Attributes ═══ ═══ List Actions ═══ ═══ List Events ═══ ═══ List Settings - General ═══ ═══ List Settings - Size/Position ═══ ═══ List Settings - Font ═══ ═══ List General Advice ═══ ═══ 11.12. Menu ═══ ═══ Menu Description ═══ ═══ Menu Attributes ═══ ═══ Menu Actions ═══ ═══ Menu Events ═══ ═══ 11.13. Multi-line Edit ═══ ═══ Multi-line Edit Description ═══ ═══ Multi-line Edit Attributes ═══ ═══ Multi-line Edit Actions ═══ ═══ Multi-line Edit Events ═══ ═══ Multi-line Edit Settings - General ═══ ═══ Multi-line Edit Settings - Size/Position ═══ ═══ Multi-line Edit Settings - Font ═══ ═══ Multi-line Edit General Advice ═══ ═══ 11.14. Multiple Select List ═══ ═══ Multiple Select List Description ═══ ═══ Multiple Select List Attributes ═══ ═══ Multiple Select List Actions ═══ ═══ Multiple Select List Events ═══ ═══ Multiple Select List Settings - General ═══ ═══ Multiple Select List Settings - Size/Position ═══ ═══ Multiple Select List Settings - Font ═══ ═══ Multiple Select List General Advice ═══ ═══ 11.15. Notebook ═══ ═══ Notebook Description ═══ ═══ Notebook Attributes ═══ ═══ Notebook Actions ═══ ═══ Notebook Events ═══ ═══ Notebook Settings - General ═══ ═══ Notebook Settings - Size/Position ═══ ═══ Notebook Settings - Layout ═══ ═══ Notebook Settings - Binding ═══ ═══ Notebook Settings - Colors ═══ ═══ Notebook Settings - Justification ═══ ═══ 11.15.1. Notebook Page ═══ ═══ Notebook Page Description ═══ ═══ Notebook Page Attributes ═══ ═══ Notebook Page Actions ═══ ═══ Notebook Page Events ═══ ═══ Notebook Page Settings - General ═══ ═══ Notebook Page Settings - Page ═══ ═══ 11.16. Object Factory ═══ ═══ Object Factory Description ═══ ═══ Object Factory Attributes ═══ ═══ Object Factory Actions ═══ ═══ Object Factory Events ═══ ═══ Object Factory Settings - General ═══ ═══ Object Factory General Advice ═══ ═══ 11.17. Ordered Collection ═══ ═══ Ordered Collection Description ═══ ═══ Ordered Collection Attributes ═══ ═══ Ordered Collection Actions ═══ ═══ 11.18. Program Starter ═══ ═══ Program Starter Description ═══ ═══ Program Starter Attributes ═══ ═══ Program Starter Actions ═══ ═══ Program Starter Events ═══ ═══ Program Starter Settings - Program ═══ ═══ Program Starter General Advice ═══ ═══ 11.19. Push Button ═══ ═══ Push Button Description ═══ ═══ Push Button Attributes ═══ ═══ Push Button Actions ═══ ═══ Push Button Events ═══ ═══ Push Button Settings - General ═══ ═══ Push Button Settings - Size/Position ═══ ═══ Push Button Settings - Font ═══ ═══ Push Button General Advice ═══ ═══ 11.20. Radio Button Set ═══ ═══ Radio Button Set Description ═══ ═══ Radio Button Set Attributes ═══ ═══ Radio Button Set Actions ═══ ═══ Radio Button Set Events ═══ ═══ Radio Button Set Settings - General ═══ ═══ Radio Button Set Settings - Size/Position ═══ ═══ Radio Button Set Settings - Font ═══ ═══ Radio Button Set General Advice ═══ ═══ 11.21. Scale ═══ ═══ Scale Description ═══ ═══ Scale Attributes ═══ ═══ Scale Actions ═══ ═══ Scale Events ═══ ═══ Scale Settings - General ═══ ═══ Scale Settings - Size/Position ═══ ═══ Scale Settings - Font ═══ ═══ Scale General Advice ═══ ═══ 11.22. Separator ═══ ═══ Separator Description ═══ ═══ Separator Attributes ═══ ═══ Separator Actions ═══ ═══ Separator Events ═══ ═══ Separator Settings - General ═══ ═══ Separator Settings - Size/Position ═══ ═══ Separator General Advice ═══ ═══ 11.23. Stored Procedure ═══ ═══ Stored Procedure Description ═══ ═══ Stored Procedure Attributes ═══ ═══ Stored Procedure Actions ═══ ═══ Stored Procedure Events ═══ ═══ Stored Procedure Settings - Procedure ═══ ═══ Stored Procedure General Advice ═══ ═══ 11.24. Table ═══ ═══ Table Description ═══ ═══ Table Attributes ═══ ═══ Table Actions ═══ ═══ Table Events ═══ ═══ Table Settings - General ═══ ═══ Table Settings - Size/Position ═══ ═══ 11.24.1. Table Column ═══ ═══ Table Column Description ═══ ═══ Table Column Attributes ═══ ═══ Table Column Actions ═══ ═══ Table Column Events ═══ ═══ Table Column Settings - General ═══ ═══ 11.25. Text ═══ ═══ Text Description ═══ ═══ Text Attributes ═══ ═══ Text Actions ═══ ═══ Text Events ═══ ═══ Text Settings - General ═══ ═══ Text Settings - Size/Position ═══ ═══ Text Settings - Font ═══ ═══ Text General Advice ═══ ═══ 11.26. Toggle Button ═══ ═══ Toggle Button Description ═══ ═══ Toggle Button Attributes ═══ ═══ Toggle Button Actions ═══ ═══ Toggle Button Events ═══ ═══ Toggle Button Settings - General ═══ ═══ Toggle Button Settings - Size/Position ═══ ═══ Toggle Button Settings - Font ═══ ═══ Toggle Button General Advice ═══ ═══ 11.27. Variable ═══ ═══ Variable Description ═══ ═══ Variable Attributes ═══ ═══ Variable General Advice ═══ ═══ 11.28. Window ═══ ═══ Window Description ═══ ═══ Window Attributes ═══ ═══ Window Actions ═══ ═══ Window Events ═══ ═══ Window Settings - General ═══ ═══ Window Settings - Size/Position ═══ ═══ Window Settings - Font ═══ ═══ Window General Advice ═══ ═══ 12. Appendices ═══ ═══ 12.1. Quick Reference ═══ ═══ 12.1.1. Composition Editor Reference ═══ ═══ 12.1.2. Script Editor Reference ═══ ═══ 12.1.3. Public Interface Editor Reference ═══ ═══ 12.1.4. Tool Bar Reference ═══ ═══ 12.1.5. Standard Parts Catalog ═══ ═══ 12.2. Personal Notes Summary ═══ ═══ 12.3. Getting Technical Support ═══ ═══ Things to Check ═══ ═══ How to Get Support ═══ ═══ 12.4. VisualAge Messages ═══ ═══ Message Overview ═══ ═══ ABE Messages ═══ ═══ ABT Messages ═══ ═══ COM Messages ═══ ═══ DBB Messages ═══ ═══ DBI Messages ═══ ═══ MT Messages ═══ ═══ PRS Messages ═══ ═══ SQL Messages ═══ ═══ 12.5. Reusable Icons ═══ ═══ 13. Glossary ═══ ═══ A ═══ ═══ B ═══ ═══ C ═══ ═══ D ═══ ═══ E ═══ ═══ F ═══ ═══ G ═══ ═══ H ═══ ═══ I ═══ ═══ J ═══ ═══ K ═══ ═══ L ═══ ═══ M ═══ ═══ N ═══ ═══ O ═══ ═══ P ═══ ═══ Q ═══ ═══ R ═══ ═══ S ═══ ═══ T ═══ ═══ U ═══ ═══ V ═══ ═══ W ═══ ═══ XYZ ═══ ═══ 14. Send Us Your Comments ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══ ═══