Introduction
These notes provide a comprehensive mathematical characterization of
hypothesis testing, covering assumptions, procedures, types, performance
measures, error types, and practical applications with manual
calculations and R verification.
What is HTML?
(Structure)
HTML (HyperText Markup Language) defines the structure of a web page.
It tells the browser what elements exist and how content is
organized.
Basic HTML Skeleton
<!DOCTYPE html> <!-- Tells the browser which HTML version to expect -->
<html>
<head>
<title>My First Web Page</title>
</head>
<body>
<h1>Welcome</h1>
<p>This is a paragraph.</p>
</body>
</html>
Key Concepts
<html>: Root element
<head>: Metadata (title, styles, links)
<body>: Visible content
- Tags usually come in pairs:
<tag>...</tag>
2. Common HTML
Elements
Text Elements
<h1>Main Heading</h1>
<h2>Subheading</h2>
<p>Paragraph text</p>
Lists
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
Links and Images
<a href="https://example.com">Visit Site</a>
<img src="image.jpg" alt="Description">
Div and Section (Layout Containers)
<div>Generic container</div>
<section>Semantic section</section>
What is CSS?
(Style)
CSS (Cascading Style Sheets) controls the appearance of HTML
elements.
Basic CSS Syntax
selector {
property: value;
}
Example
body {
background-color: #f4f4f4;
}
h1 {
color: purple;
}
Ways to Add CSS
Inline
<p style="color: red;">Text</p>
Internal
<style>
p { color: blue; }
</style>
External (Best Practice)
<link rel="stylesheet" href="styles.css">
Layout Basics: Building
Panels
To create multiple functional panels, we use CSS layout techniques
like Flexbox or Grid.
Flexbox
- Enables horizontal or vertical layouts
- Automatically adjusts spacing
.container {
display: flex;
}
Box Model
Every element consists of:
- Content
- Padding
- Border
- Margin
Multi-Panel Web Page
(Example)
HTML Structure
<!DOCTYPE html>
<html>
<head>
<title>Multi-Panel Page</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<header>
<h1>My Dashboard</h1>
</header>
<div class="container">
<nav class="sidebar">
<ul>
<li>Home</li>
<li>Profile</li>
<li>Settings</li>
</ul>
</nav>
<main class="content">
<h2>Main Content</h2>
<p>This is the central panel.</p>
</main>
<aside class="panel">
<h3>Extra Panel</h3>
<p>Additional info here.</p>
</aside>
</div>
<footer>
<p>Footer information</p>
</footer>
</body>
</html>
Since the a code produces a standalone Webpage, we cannot include in
this Markdown document.
HTML Tables
HTML Table With No
CSS
Example 3-by-3 with table different column width and
some merged cells.
<!DOCTYPE html>
<html>
<head>
<title>Dashboard Table Layout</title>
</head>
<body>
<table border="1" width="100%" height="600">
<!-- Header -->
<tr>
<td colspan="3" align="center">
<center><h2>My Dashboard</h2></center>
</td>
</tr>
<!-- Main Row -->
<tr>
<!-- Sidebar -->
<td width="20%" valign="top">
<ul>
<li>Home</li>
<li>Profile</li>
<li>Settings</li>
</ul>
</td>
<!-- Main Content -->
<td width="60%" valign="top">
<h3>Main Content</h3>
<p>This is the central panel.</p>
</td>
<!-- Extra Panel -->
<td width="20%" valign="top">
<h3>Extra Panel</h3>
<p>Additional info here.</p>
</td>
</tr>
<!-- Footer -->
<tr>
<td colspan="3" align="center">
Footer information
</td>
</tr>
</table>
</body>
</html>
My Dashboard
|
|
|
Main Content
This is the central panel.
|
Extra Panel
Additional info here.
|
|
Footer information
|
HTML With Inline
CSS
<!DOCTYPE html>
<html>
<head>
<title>Dashboard Table Layout</title>
</head>
<body style="margin:0; font-family: Arial, sans-serif;">
<table style="width:100%; height:100vh; border-collapse:collapse;">
<!-- Header -->
<tr>
<td colspan="3"
style="background-color:#2d1b3d; color:white; text-align:center; font-size:28px; font-weight:bold; height:80px;">
My Dashboard
</td>
</tr>
<!-- Main Row -->
<tr>
<!-- Sidebar -->
<td style="background-color:#6E3061; color:white; width:20%; vertical-align:top; padding:15px;">
<ul style="padding-left:20px;">
<li>Home</li>
<li>Profile</li>
<li>Settings</li>
</ul>
</td>
<!-- Main Content -->
<td style="background-color:#d3d3d3; width:60%; vertical-align:top; padding:15px;">
<h2>Main Content</h2>
<p>This is the central panel.</p>
</td>
<!-- Extra Panel -->
<td style="background-color:#bfbfbf; width:20%; vertical-align:top; padding:15px;">
<h3>Extra Panel</h3>
<p>Additional info here.</p>
</td>
</tr>
<!-- Footer -->
<tr>
<td colspan="3"
style="background-color:#2d1b3d; color:white; text-align:center; height:50px;">
Footer information
</td>
</tr>
</table>
</body>
</html>
The actual HTML table is rendered as
follows.
|
My Dashboard
|
|
|
Main Content
This is the central panel.
|
Extra Panel
Additional info here.
|
|
Footer information
|
HTML Table with An
Internal CSS
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Dashboard Table Layout</title>
<style>
body {
margin: 0;
font-family: Arial, sans-serif;
}
table {
width: 100%;
height: 100vh;
border-collapse: collapse;
}
td {
vertical-align: top;
padding: 15px;
}
/* Header */
.header {
background-color: #2d1b3d;
color: white;
text-align: center;
font-size: 28px;
font-weight: bold;
height: 80px;
}
/* Sidebar */
.sidebar {
background-color: #6E3061;
color: white;
width: 20%;
}
/* Main content */
.main {
background-color: #d3d3d3;
width: 60%;
}
/* Right panel */
.extra {
background-color: #bfbfbf;
width: 20%;
}
/* Footer */
.footer {
background-color: #2d1b3d;
color: white;
text-align: center;
height: 50px;
}
ul {
padding-left: 20px;
}
</style>
</head>
<body>
<table>
<!-- Header -->
<tr>
<td colspan="3" class="header">My Dashboard</td>
</tr>
<!-- Main Row -->
<tr>
<!-- Sidebar -->
<td class="sidebar">
<ul>
<li>Home</li>
<li>Profile</li>
<li>Settings</li>
</ul>
</td>
<!-- Main Content -->
<td class="main">
<h2>Main Content</h2>
<p>This is the central panel.</p>
</td>
<!-- Extra Panel -->
<td class="extra">
<h3>Extra Panel</h3>
<p>Additional info here.</p>
</td>
</tr>
<!-- Footer -->
<tr>
<td colspan="3" class="footer">Footer information</td>
</tr>
</table>
</body>
</html>
Main Content
This is the central panel.
|
LS0tDQp0aXRsZTogIkhUTUwsIENTUywgYW5kIE11bHRpLVBhbmVsIFdlYiBQYWdlcyINCmF1dGhvcjogIkNoZW5nIFBlbmciDQpkYXRlOiAiV2VzdCBDaGVzdGVyIFVuaXZlcnNpdHkiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6IA0KICAgIHRvYzogeWVzDQogICAgdG9jX2RlcHRoOiA0DQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICB0b2NfY29sbGFwc2VkOiB5ZXMNCiAgICBjb2RlX2ZvbGRpbmc6IHNob3cNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBzbW9vdGhfc2Nyb2xsOiB5ZXMNCiAgICB0aGVtZTogbHVtZW4NCiAgcGRmX2RvY3VtZW50OiANCiAgICB0b2M6IHllcw0KICAgIHRvY19kZXB0aDogNA0KICAgIGZpZ19jYXB0aW9uOiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIGZpZ193aWR0aDogMw0KICAgIGZpZ19oZWlnaHQ6IDMNCiAgd29yZF9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICBmaWdfY2FwdGlvbjogeWVzDQogICAga2VlcF9tZDogeWVzDQplZGl0b3Jfb3B0aW9uczogDQogIGNodW5rX291dHB1dF90eXBlOiBpbmxpbmUNCi0tLQ0KDQpgYGB7Y3NzLCBlY2hvID0gRkFMU0V9DQoNCi8qIFN0eWxlIGZvciB0aGUgdG9nZ2xlIGJ1dHRvbiAqLw0KI3RvYy10b2dnbGUgew0KICBwb3NpdGlvbjogZml4ZWQ7DQogIHRvcDogNTBweDsNCiAgcmlnaHQ6IDQwcHg7DQogIHotaW5kZXg6IDEwMDA7DQogIHBhZGRpbmc6IDFweCAxcHg7DQogIGJhY2tncm91bmQtY29sb3I6ICNmOGY5ZmE7DQogIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7DQogIGJvcmRlci1yYWRpdXM6IDRweDsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICBmb250LXNpemU6IDEycHg7DQogIGNvbG9yOiBkYXJrcmVkDQp9DQoNCi8qIFdoZW4gVE9DIGlzIGhpZGRlbiAqLw0KLnRvYy1oaWRkZW4gI1RPQyB7DQogIGRpc3BsYXk6IG5vbmU7DQp9DQoNCi8qIEFkanVzdCBtYWluIGNvbnRlbnQgd2hlbiBUT0MgaXMgaGlkZGVuICovDQoudG9jLWhpZGRlbiAubWFpbi1jb250YWluZXIgew0KICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50Ow0KICBtYXJnaW4tcmlnaHQ6IDAgIWltcG9ydGFudDsNCn0NCg0KLyogU21vb3RoIHRyYW5zaXRpb24gKi8NCiNUT0MsIC5tYWluLWNvbnRhaW5lciB7DQogIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7DQp9DQoNCg0KI1RPQzo6YmVmb3JlIHsNCiAgY29udGVudDogIlRhYmxlIG9mIENvbnRlbnRzIjsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGZvbnQtc2l6ZTogMS4yZW07DQogIGRpc3BsYXk6IGJsb2NrOw0KICBjb2xvcjogbmF2eTsNCiAgbWFyZ2luLWJvdHRvbTogMTBweDsNCn0NCg0KDQpkaXYjVE9DIGxpIHsgICAgIC8qIHRhYmxlIG9mIGNvbnRlbnQgICovDQogICAgbGlzdC1zdHlsZTp1cHBlci1yb21hbjsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOm5vbmU7DQogICAgYmFja2dyb3VuZC1yZXBlYXQ6bm9uZTsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjA7DQp9DQoNCmgxLnRpdGxlIHsgICAgLyogbGV2ZWwgMSBoZWFkZXIgb2YgdGl0bGUgICovDQogIGZvbnQtc2l6ZTogMjJweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGNvbG9yOiBEYXJrUmVkOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIGZvbnQtZmFtaWx5OiAiR2lsbCBTYW5zIiwgc2Fucy1zZXJpZjsNCn0NCg0KaDQuYXV0aG9yIHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgZm9udC1zaXplOiAxNXB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1mYW1pbHk6IHN5c3RlbS11aTsNCiAgY29sb3I6IG5hdnk7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KaDQuZGF0ZSB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogIGZvbnQtc2l6ZTogMThweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGZvbnQtZmFtaWx5OiAiR2lsbCBTYW5zIiwgc2Fucy1zZXJpZjsNCiAgY29sb3I6IERhcmtCbHVlOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCmgxIHsgLyogSGVhZGVyIDEgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDIwcHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IGRhcmtyZWQ7DQogICAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQpoMiB7IC8qIEhlYWRlciAyIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxOHB4Ow0KICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBuYXZ5Ow0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCmgzIHsgLyogSGVhZGVyIDMgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE2cHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IG5hdnk7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KaDQgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMTRweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IGRhcmtyZWQ7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KLyogQWRkIGRvdHMgYWZ0ZXIgbnVtYmVyZWQgaGVhZGVycyAqLw0KLmhlYWRlci1zZWN0aW9uLW51bWJlcjo6YWZ0ZXIgew0KICBjb250ZW50OiAiLiI7DQoNCmJvZHkge2JhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7DQogICAgICBjb2xvcjogIzAwMDAwMDsNCiAgICAgIGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsNCiAgICAgIGZvbnQtc2l6ZTogMXJlbTsNCiAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7DQogICAgICB9DQoNCi5oaWdobGlnaHRtZSB7IGJhY2tncm91bmQtY29sb3I6eWVsbG93OyB9DQoNCnAgeyBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyB9DQoNCn0NCmBgYA0KDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0KIyBjb2RlIGNodW5rIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBSIGNvZGUsIHdhcm5pbmdzLCBhbmQgb3V0cHV0IA0KIyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQgZmlsZXMuDQppZiAoIXJlcXVpcmUoImtuaXRyIikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoImtuaXRyIikNCiAgIGxpYnJhcnkoa25pdHIpDQp9DQoNCiMjIGxpYnJhcnkoSG1pc2MpDQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsICAgICAgICMgaW5jbHVkZSBjb2RlIGNodW5rIGluIHRoZSBvdXRwdXQgZmlsZQ0KICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgPSBGQUxTRSwgICAjIHNvbWV0aW1lcywgeW91IGNvZGUgbWF5IHByb2R1Y2Ugd2FybmluZyBtZXNzYWdlcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB5b3UgY2FuIGNob29zZSB0byBpbmNsdWRlIHRoZSB3YXJuaW5nIG1lc3NhZ2VzIGluDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIG91dHB1dCBmaWxlLiANCiAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gVFJVRSwgICAgIyB5b3UgY2FuIGFsc28gZGVjaWRlIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgb3V0cHV0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW4gdGhlIG91dHB1dCBmaWxlLg0KICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gTkENCiAgICAgICAgICAgICAgICAgICAgICApICANCg0KYGBgDQoNClwNCg0KIyBJbnRyb2R1Y3Rpb24NCg0KVGhlc2Ugbm90ZXMgcHJvdmlkZSBhIGNvbXByZWhlbnNpdmUgbWF0aGVtYXRpY2FsIGNoYXJhY3Rlcml6YXRpb24gb2YgaHlwb3RoZXNpcyB0ZXN0aW5nLCBjb3ZlcmluZyBhc3N1bXB0aW9ucywgcHJvY2VkdXJlcywgdHlwZXMsIHBlcmZvcm1hbmNlIG1lYXN1cmVzLCBlcnJvciB0eXBlcywgYW5kIHByYWN0aWNhbCBhcHBsaWNhdGlvbnMgd2l0aCBtYW51YWwgY2FsY3VsYXRpb25zIGFuZCBSIHZlcmlmaWNhdGlvbi4NCg0KIyBXaGF0IGlzIEhUTUw/IChTdHJ1Y3R1cmUpDQoNCkhUTUwgKEh5cGVyVGV4dCBNYXJrdXAgTGFuZ3VhZ2UpIGRlZmluZXMgdGhlIHN0cnVjdHVyZSBvZiBhIHdlYiBwYWdlLiBJdCB0ZWxscyB0aGUgYnJvd3NlciB3aGF0IGVsZW1lbnRzIGV4aXN0IGFuZCBob3cgY29udGVudCBpcyBvcmdhbml6ZWQuDQoNCg0KKipCYXNpYyBIVE1MIFNrZWxldG9uKioNCg0KYGBge2h0bWx9DQo8IURPQ1RZUEUgaHRtbD4gIDwhLS0gVGVsbHMgdGhlIGJyb3dzZXIgd2hpY2ggSFRNTCB2ZXJzaW9uIHRvIGV4cGVjdCAtLT4NCjxodG1sPg0KPGhlYWQ+DQogICAgPHRpdGxlPk15IEZpcnN0IFdlYiBQYWdlPC90aXRsZT4NCjwvaGVhZD4NCjxib2R5Pg0KICAgIDxoMT5XZWxjb21lPC9oMT4NCiAgICA8cD5UaGlzIGlzIGEgcGFyYWdyYXBoLjwvcD4NCjwvYm9keT4NCjwvaHRtbD4NCmBgYA0KDQoqKktleSBDb25jZXB0cyoqDQoNCiogYDxodG1sPmA6IFJvb3QgZWxlbWVudA0KKiBgPGhlYWQ+YDogTWV0YWRhdGEgKHRpdGxlLCBzdHlsZXMsIGxpbmtzKQ0KKiBgPGJvZHk+YDogVmlzaWJsZSBjb250ZW50DQoqIFRhZ3MgdXN1YWxseSBjb21lIGluIHBhaXJzOiBgPHRhZz4uLi48L3RhZz5gDQoNCg0KIyAyLiBDb21tb24gSFRNTCBFbGVtZW50cw0KDQoqKlRleHQgRWxlbWVudHMqKg0KDQpgYGB7aHRtbH0NCjxoMT5NYWluIEhlYWRpbmc8L2gxPg0KPGgyPlN1YmhlYWRpbmc8L2gyPg0KPHA+UGFyYWdyYXBoIHRleHQ8L3A+DQpgYGANCg0KKipMaXN0cyoqDQoNCmBgYHtodG1sfQ0KPHVsPg0KICA8bGk+SXRlbSAxPC9saT4NCiAgPGxpPkl0ZW0gMjwvbGk+DQo8L3VsPg0KYGBgDQoNCioqTGlua3MgYW5kIEltYWdlcyoqDQoNCmBgYHtodG1sfQ0KPGEgaHJlZj0iaHR0cHM6Ly9leGFtcGxlLmNvbSI+VmlzaXQgU2l0ZTwvYT4NCjxpbWcgc3JjPSJpbWFnZS5qcGciIGFsdD0iRGVzY3JpcHRpb24iPg0KYGBgDQoNCioqRGl2IGFuZCBTZWN0aW9uIChMYXlvdXQgQ29udGFpbmVycykqKg0KDQpgYGB7aHRtbH0NCjxkaXY+R2VuZXJpYyBjb250YWluZXI8L2Rpdj4NCjxzZWN0aW9uPlNlbWFudGljIHNlY3Rpb248L3NlY3Rpb24+DQpgYGANCg0KDQojIFdoYXQgaXMgQ1NTPyAoU3R5bGUpDQoNCkNTUyAoQ2FzY2FkaW5nIFN0eWxlIFNoZWV0cykgY29udHJvbHMgdGhlIGFwcGVhcmFuY2Ugb2YgSFRNTCBlbGVtZW50cy4NCg0KQmFzaWMgQ1NTIFN5bnRheA0KDQpgYGB7Y3NzfQ0Kc2VsZWN0b3Igew0KICAgIHByb3BlcnR5OiB2YWx1ZTsNCn0NCmBgYA0KDQoqKkV4YW1wbGUqKg0KDQpgYGB7aHRtbH0NCmJvZHkgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmNGY0ZjQ7DQp9DQoNCmgxIHsNCiAgICBjb2xvcjogcHVycGxlOw0KfQ0KYGBgDQoNCiMgIFdheXMgdG8gQWRkIENTUw0KDQoqKklubGluZSoqDQoNCmBgYHtjc3N9DQo8cCBzdHlsZT0iY29sb3I6IHJlZDsiPlRleHQ8L3A+DQpgYGANCg0KKipJbnRlcm5hbCoqDQoNCmBgYHtjc3N9DQo8c3R5bGU+DQpwIHsgY29sb3I6IGJsdWU7IH0NCjwvc3R5bGU+DQpgYGANCg0KDQoqKkV4dGVybmFsIChCZXN0IFByYWN0aWNlKSoqDQoNCmBgYHtjc3N9DQo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlcy5jc3MiPg0KYGBgDQoNCiMgTGF5b3V0IEJhc2ljczogQnVpbGRpbmcgUGFuZWxzDQoNClRvIGNyZWF0ZSBtdWx0aXBsZSBmdW5jdGlvbmFsIHBhbmVscywgd2UgdXNlIENTUyBsYXlvdXQgdGVjaG5pcXVlcyBsaWtlIEZsZXhib3ggb3IgR3JpZC4NCg0KKipGbGV4Ym94KioNCg0KKiBFbmFibGVzIGhvcml6b250YWwgb3IgdmVydGljYWwgbGF5b3V0cw0KKiBBdXRvbWF0aWNhbGx5IGFkanVzdHMgc3BhY2luZw0KDQpgYGB7Y3NzfQ0KLmNvbnRhaW5lciB7DQogICAgZGlzcGxheTogZmxleDsNCn0NCmBgYA0KDQoqKkJveCBNb2RlbCoqDQoNCkV2ZXJ5IGVsZW1lbnQgY29uc2lzdHMgb2Y6DQoNCiogQ29udGVudA0KKiBQYWRkaW5nDQoqIEJvcmRlcg0KKiBNYXJnaW4NCg0KIyBNdWx0aS1QYW5lbCBXZWIgUGFnZSAoRXhhbXBsZSkNCg0KKipIVE1MIFN0cnVjdHVyZSoqDQoNCmBgYHtodG1sfQ0KPCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KICAgIDx0aXRsZT5NdWx0aS1QYW5lbCBQYWdlPC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyI+DQo8L2hlYWQ+DQo8Ym9keT4NCg0KPGhlYWRlcj4NCiAgICA8aDE+TXkgRGFzaGJvYXJkPC9oMT4NCjwvaGVhZGVyPg0KDQo8ZGl2IGNsYXNzPSJjb250YWluZXIiPg0KICAgIDxuYXYgY2xhc3M9InNpZGViYXIiPg0KICAgICAgICA8dWw+DQogICAgICAgICAgICA8bGk+SG9tZTwvbGk+DQogICAgICAgICAgICA8bGk+UHJvZmlsZTwvbGk+DQogICAgICAgICAgICA8bGk+U2V0dGluZ3M8L2xpPg0KICAgICAgICA8L3VsPg0KICAgIDwvbmF2Pg0KDQogICAgPG1haW4gY2xhc3M9ImNvbnRlbnQiPg0KICAgICAgICA8aDI+TWFpbiBDb250ZW50PC9oMj4NCiAgICAgICAgPHA+VGhpcyBpcyB0aGUgY2VudHJhbCBwYW5lbC48L3A+DQogICAgPC9tYWluPg0KDQogICAgPGFzaWRlIGNsYXNzPSJwYW5lbCI+DQogICAgICAgIDxoMz5FeHRyYSBQYW5lbDwvaDM+DQogICAgICAgIDxwPkFkZGl0aW9uYWwgaW5mbyBoZXJlLjwvcD4NCiAgICA8L2FzaWRlPg0KPC9kaXY+DQoNCjxmb290ZXI+DQogICAgPHA+Rm9vdGVyIGluZm9ybWF0aW9uPC9wPg0KPC9mb290ZXI+DQoNCjwvYm9keT4NCjwvaHRtbD4NCmBgYA0KDQpTaW5jZSB0aGUgYSBjb2RlIHByb2R1Y2VzIGEgc3RhbmRhbG9uZSBXZWJwYWdlLCB3ZSBjYW5ub3QgaW5jbHVkZSBpbiB0aGlzIE1hcmtkb3duIGRvY3VtZW50Lg0KDQoNCg0KDQoNCiMgSFRNTCBUYWJsZXMNCg0KIyMgSFRNTCBUYWJsZSBXaXRoIE5vIENTUw0KDQoqKkV4YW1wbGUqKiAzLWJ5LTMgd2l0aCB0YWJsZSBkaWZmZXJlbnQgY29sdW1uIHdpZHRoIGFuZCBzb21lIG1lcmdlZCBjZWxscy4NCg0KYGBge2h0bWx9DQo8IURPQ1RZUEUgaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQogICAgPHRpdGxlPkRhc2hib2FyZCBUYWJsZSBMYXlvdXQ8L3RpdGxlPg0KPC9oZWFkPg0KPGJvZHk+DQoNCjx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjYwMCI+DQoNCiAgICA8IS0tIEhlYWRlciAtLT4NCiAgICA8dHI+DQogICAgICAgIDx0ZCBjb2xzcGFuPSIzIiBhbGlnbj0iY2VudGVyIj4NCiAgICAgICAgICAgIDxjZW50ZXI+PGgyPk15IERhc2hib2FyZDwvaDI+PC9jZW50ZXI+DQogICAgICAgIDwvdGQ+DQogICAgPC90cj4NCg0KICAgIDwhLS0gTWFpbiBSb3cgLS0+DQogICAgPHRyPg0KDQogICAgICAgIDwhLS0gU2lkZWJhciAtLT4NCiAgICAgICAgPHRkIHdpZHRoPSIyMCUiIHZhbGlnbj0idG9wIj4NCiAgICAgICAgICAgIDx1bD4NCiAgICAgICAgICAgICAgICA8bGk+SG9tZTwvbGk+DQogICAgICAgICAgICAgICAgPGxpPlByb2ZpbGU8L2xpPg0KICAgICAgICAgICAgICAgIDxsaT5TZXR0aW5nczwvbGk+DQogICAgICAgICAgICA8L3VsPg0KICAgICAgICA8L3RkPg0KDQogICAgICAgIDwhLS0gTWFpbiBDb250ZW50IC0tPg0KICAgICAgICA8dGQgd2lkdGg9IjYwJSIgdmFsaWduPSJ0b3AiPg0KICAgICAgICAgICAgPGgzPk1haW4gQ29udGVudDwvaDM+DQogICAgICAgICAgICA8cD5UaGlzIGlzIHRoZSBjZW50cmFsIHBhbmVsLjwvcD4NCiAgICAgICAgPC90ZD4NCg0KICAgICAgICA8IS0tIEV4dHJhIFBhbmVsIC0tPg0KICAgICAgICA8dGQgd2lkdGg9IjIwJSIgdmFsaWduPSJ0b3AiPg0KICAgICAgICAgICAgPGgzPkV4dHJhIFBhbmVsPC9oMz4NCiAgICAgICAgICAgIDxwPkFkZGl0aW9uYWwgaW5mbyBoZXJlLjwvcD4NCiAgICAgICAgPC90ZD4NCg0KICAgIDwvdHI+DQoNCiAgICA8IS0tIEZvb3RlciAtLT4NCiAgICA8dHI+DQogICAgICAgIDx0ZCBjb2xzcGFuPSIzIiBhbGlnbj0iY2VudGVyIj4NCiAgICAgICAgICAgIEZvb3RlciBpbmZvcm1hdGlvbg0KICAgICAgICA8L3RkPg0KICAgIDwvdHI+DQoNCjwvdGFibGU+DQoNCjwvYm9keT4NCjwvaHRtbD4NCmBgYA0KDQoNCjx0YWJsZSBib3JkZXI9IjIiIGJvcmRlcmNvbG9yPSAicmVkIiB3aWR0aD0iODAlIiBoZWlnaHQ9IjQwMCI+DQogICAgPCEtLSBIZWFkZXIgLS0+DQogICAgPHRyPg0KICAgICAgICA8dGQgIGNvbHNwYW4gPSAiMyIgYWxpZ249ImNlbnRlciI+DQogICAgICAgICAgICA8aDI+PGNlbnRlcj5NeSBEYXNoYm9hcmQ8L2NlbnRlcj48L2gyPg0KICAgICAgICA8L3RkPg0KICAgIDwvdHI+DQogICAgPCEtLSBNYWluIFJvdyAtLT4NCiAgICA8dHI+DQogICAgICAgIDwhLS0gU2lkZWJhciAtLT4NCiAgICAgICAgPHRkIHdpZHRoPSIyMCUiIHZhbGlnbj0idG9wIj4NCiAgICAgICAgICAgIDx1bD4NCiAgICAgICAgICAgICAgICA8bGk+SG9tZTwvbGk+DQogICAgICAgICAgICAgICAgPGxpPlByb2ZpbGU8L2xpPg0KICAgICAgICAgICAgICAgIDxsaT5TZXR0aW5nczwvbGk+DQogICAgICAgICAgICA8L3VsPg0KICAgICAgICA8L3RkPg0KICAgICAgICA8IS0tIE1haW4gQ29udGVudCAtLT4NCiAgICAgICAgPHRkIHdpZHRoPSI2MCUiIHZhbGlnbj0idG9wIj4NCiAgICAgICAgICAgIDxoMz5NYWluIENvbnRlbnQ8L2gzPg0KICAgICAgICAgICAgPHA+VGhpcyBpcyB0aGUgY2VudHJhbCBwYW5lbC48L3A+DQogICAgICAgIDwvdGQ+DQogICAgICAgIDwhLS0gRXh0cmEgUGFuZWwgLS0+DQogICAgICAgIDx0ZCB3aWR0aD0iMjAlIiB2YWxpZ249InRvcCI+DQogICAgICAgICAgICA8aDM+RXh0cmEgUGFuZWw8L2gzPg0KICAgICAgICAgICAgPHA+QWRkaXRpb25hbCBpbmZvIGhlcmUuPC9wPg0KICAgICAgICA8L3RkPg0KICAgIDwvdHI+DQogICAgPCEtLSBGb290ZXIgLS0+DQogICAgPHRyPg0KICAgICAgICA8dGQgY29sc3Bhbj0iMyIgYWxpZ249ImNlbnRlciI+DQogICAgICAgICAgICBGb290ZXIgaW5mb3JtYXRpb24NCiAgICAgICAgPC90ZD4NCiAgICA8L3RyPg0KPC90YWJsZT4NCg0KDQojIyBIVE1MIFdpdGggSW5saW5lIENTUw0KDQpgYGB7aHRtbH0NCjwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8dGl0bGU+RGFzaGJvYXJkIFRhYmxlIExheW91dDwvdGl0bGU+DQo8L2hlYWQ+DQo8Ym9keSBzdHlsZT0ibWFyZ2luOjA7IGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsiPg0KDQo8dGFibGUgc3R5bGU9IndpZHRoOjEwMCU7IGhlaWdodDoxMDB2aDsgYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlOyI+DQoNCiAgICA8IS0tIEhlYWRlciAtLT4NCiAgICA8dHI+DQogICAgICAgIDx0ZCBjb2xzcGFuPSIzIiANCiAgICAgICAgICAgIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiMyZDFiM2Q7IGNvbG9yOndoaXRlOyB0ZXh0LWFsaWduOmNlbnRlcjsgZm9udC1zaXplOjI4cHg7IGZvbnQtd2VpZ2h0OmJvbGQ7IGhlaWdodDo4MHB4OyI+DQogICAgICAgICAgICBNeSBEYXNoYm9hcmQNCiAgICAgICAgPC90ZD4NCiAgICA8L3RyPg0KDQogICAgPCEtLSBNYWluIFJvdyAtLT4NCiAgICA8dHI+DQoNCiAgICAgICAgPCEtLSBTaWRlYmFyIC0tPg0KICAgICAgICA8dGQgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzZFMzA2MTsgY29sb3I6d2hpdGU7IHdpZHRoOjIwJTsgdmVydGljYWwtYWxpZ246dG9wOyBwYWRkaW5nOjE1cHg7Ij4NCiAgICAgICAgICAgIDx1bCBzdHlsZT0icGFkZGluZy1sZWZ0OjIwcHg7Ij4NCiAgICAgICAgICAgICAgICA8bGk+SG9tZTwvbGk+DQogICAgICAgICAgICAgICAgPGxpPlByb2ZpbGU8L2xpPg0KICAgICAgICAgICAgICAgIDxsaT5TZXR0aW5nczwvbGk+DQogICAgICAgICAgICA8L3VsPg0KICAgICAgICA8L3RkPg0KDQogICAgICAgIDwhLS0gTWFpbiBDb250ZW50IC0tPg0KICAgICAgICA8dGQgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6I2QzZDNkMzsgd2lkdGg6NjAlOyB2ZXJ0aWNhbC1hbGlnbjp0b3A7IHBhZGRpbmc6MTVweDsiPg0KICAgICAgICAgICAgPGgyPk1haW4gQ29udGVudDwvaDI+DQogICAgICAgICAgICA8cD5UaGlzIGlzIHRoZSBjZW50cmFsIHBhbmVsLjwvcD4NCiAgICAgICAgPC90ZD4NCg0KICAgICAgICA8IS0tIEV4dHJhIFBhbmVsIC0tPg0KICAgICAgICA8dGQgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6I2JmYmZiZjsgd2lkdGg6MjAlOyB2ZXJ0aWNhbC1hbGlnbjp0b3A7IHBhZGRpbmc6MTVweDsiPg0KICAgICAgICAgICAgPGgzPkV4dHJhIFBhbmVsPC9oMz4NCiAgICAgICAgICAgIDxwPkFkZGl0aW9uYWwgaW5mbyBoZXJlLjwvcD4NCiAgICAgICAgPC90ZD4NCg0KICAgIDwvdHI+DQoNCiAgICA8IS0tIEZvb3RlciAtLT4NCiAgICA8dHI+DQogICAgICAgIDx0ZCBjb2xzcGFuPSIzIiANCiAgICAgICAgICAgIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiMyZDFiM2Q7IGNvbG9yOndoaXRlOyB0ZXh0LWFsaWduOmNlbnRlcjsgaGVpZ2h0OjUwcHg7Ij4NCiAgICAgICAgICAgIEZvb3RlciBpbmZvcm1hdGlvbg0KICAgICAgICA8L3RkPg0KICAgIDwvdHI+DQoNCjwvdGFibGU+DQoNCjwvYm9keT4NCjwvaHRtbD4NCmBgYA0KDQo8Zm9udCBjb2xvciA9ICJyZWQiPlRoZSBhY3R1YWwgSFRNTCB0YWJsZSBpcyByZW5kZXJlZCBhcyBmb2xsb3dzLjwvZm9udD4NCg0KDQoNCjx0YWJsZSBzdHlsZT0id2lkdGg6MTAwJTsgaGVpZ2h0OjEwMHZoOyBib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ij4NCiAgICA8IS0tIEhlYWRlciAtLT4NCiAgICA8dHI+DQogICAgICAgIDx0ZCBjb2xzcGFuPSIzIiANCiAgICAgICAgICAgIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiMyZDFiM2Q7IGNvbG9yOndoaXRlOyB0ZXh0LWFsaWduOmNlbnRlcjsgZm9udC1zaXplOjI4cHg7IGZvbnQtd2VpZ2h0OmJvbGQ7IGhlaWdodDo4MHB4OyI+DQogICAgICAgICAgICBNeSBEYXNoYm9hcmQNCiAgICAgICAgPC90ZD4NCiAgICA8L3RyPg0KICAgIDwhLS0gTWFpbiBSb3cgLS0+DQogICAgPHRyPg0KICAgICAgICA8IS0tIFNpZGViYXIgLS0+DQogICAgICAgIDx0ZCBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojNkUzMDYxOyBjb2xvcjp3aGl0ZTsgd2lkdGg6MjAlOyB2ZXJ0aWNhbC1hbGlnbjp0b3A7IHBhZGRpbmc6MTVweDsiPg0KICAgICAgICAgICAgPHVsIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MjBweDsiPg0KICAgICAgICAgICAgICAgIDxsaT5Ib21lPC9saT4NCiAgICAgICAgICAgICAgICA8bGk+UHJvZmlsZTwvbGk+DQogICAgICAgICAgICAgICAgPGxpPlNldHRpbmdzPC9saT4NCiAgICAgICAgICAgIDwvdWw+DQogICAgICAgIDwvdGQ+DQogICAgICAgIDwhLS0gTWFpbiBDb250ZW50IC0tPg0KICAgICAgICA8dGQgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6I2QzZDNkMzsgd2lkdGg6NjAlOyB2ZXJ0aWNhbC1hbGlnbjp0b3A7IHBhZGRpbmc6MTVweDsiPg0KICAgICAgICAgICAgPGgyPk1haW4gQ29udGVudDwvaDI+DQogICAgICAgICAgICA8cD5UaGlzIGlzIHRoZSBjZW50cmFsIHBhbmVsLjwvcD4NCiAgICAgICAgPC90ZD4NCiAgICAgICAgPCEtLSBFeHRyYSBQYW5lbCAtLT4NCiAgICAgICAgPHRkIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNiZmJmYmY7IHdpZHRoOjIwJTsgdmVydGljYWwtYWxpZ246dG9wOyBwYWRkaW5nOjE1cHg7Ij4NCiAgICAgICAgICAgIDxoMz5FeHRyYSBQYW5lbDwvaDM+DQogICAgICAgICAgICA8cD5BZGRpdGlvbmFsIGluZm8gaGVyZS48L3A+DQogICAgICAgIDwvdGQ+DQogICAgPC90cj4NCiAgICA8IS0tIEZvb3RlciAtLT4NCiAgICA8dHI+DQogICAgICAgIDx0ZCBjb2xzcGFuPSIzIiANCiAgICAgICAgICAgIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiMyZDFiM2Q7IGNvbG9yOndoaXRlOyB0ZXh0LWFsaWduOmNlbnRlcjsgaGVpZ2h0OjUwcHg7Ij4NCiAgICAgICAgICAgIEZvb3RlciBpbmZvcm1hdGlvbg0KICAgICAgICA8L3RkPg0KICAgIDwvdHI+DQo8L3RhYmxlPg0KDQoNCiMjIEhUTUwgVGFibGUgd2l0aCBBbiBJbnRlcm5hbCBDU1MNCg0KYGBge2h0bWx9DQo8IURPQ1RZUEUgaHRtbD4NCjxodG1sIGxhbmc9ImVuIj4NCjxoZWFkPg0KPG1ldGEgY2hhcnNldD0iVVRGLTgiPg0KPHRpdGxlPkRhc2hib2FyZCBUYWJsZSBMYXlvdXQ8L3RpdGxlPg0KPHN0eWxlPg0KICAgIGJvZHkgew0KICAgICAgICBtYXJnaW46IDA7DQogICAgICAgIGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsNCiAgICB9DQoNCiAgICB0YWJsZSB7DQogICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICBoZWlnaHQ6IDEwMHZoOw0KICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOw0KICAgIH0NCg0KICAgIHRkIHsNCiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsNCiAgICAgICAgcGFkZGluZzogMTVweDsNCiAgICB9DQoNCiAgICAvKiBIZWFkZXIgKi8NCiAgICAuaGVhZGVyIHsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzJkMWIzZDsNCiAgICAgICAgY29sb3I6IHdoaXRlOw0KICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgICAgIGZvbnQtc2l6ZTogMjhweDsNCiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgICAgIGhlaWdodDogODBweDsNCiAgICB9DQoNCiAgICAvKiBTaWRlYmFyICovDQogICAgLnNpZGViYXIgew0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNkUzMDYxOw0KICAgICAgICBjb2xvcjogd2hpdGU7DQogICAgICAgIHdpZHRoOiAyMCU7DQogICAgfQ0KDQogICAgLyogTWFpbiBjb250ZW50ICovDQogICAgLm1haW4gew0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDNkM2QzOw0KICAgICAgICB3aWR0aDogNjAlOw0KICAgIH0NCg0KICAgIC8qIFJpZ2h0IHBhbmVsICovDQogICAgLmV4dHJhIHsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2JmYmZiZjsNCiAgICAgICAgd2lkdGg6IDIwJTsNCiAgICB9DQoNCiAgICAvKiBGb290ZXIgKi8NCiAgICAuZm9vdGVyIHsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzJkMWIzZDsNCiAgICAgICAgY29sb3I6IHdoaXRlOw0KICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgICAgIGhlaWdodDogNTBweDsNCiAgICB9DQoNCiAgICB1bCB7DQogICAgICAgIHBhZGRpbmctbGVmdDogMjBweDsNCiAgICB9DQo8L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQoNCjx0YWJsZT4NCiAgICA8IS0tIEhlYWRlciAtLT4NCiAgICA8dHI+DQogICAgICAgIDx0ZCBjb2xzcGFuPSIzIiBjbGFzcz0iaGVhZGVyIj5NeSBEYXNoYm9hcmQ8L3RkPg0KICAgIDwvdHI+DQoNCiAgICA8IS0tIE1haW4gUm93IC0tPg0KICAgIDx0cj4NCiAgICAgICAgPCEtLSBTaWRlYmFyIC0tPg0KICAgICAgICA8dGQgY2xhc3M9InNpZGViYXIiPg0KICAgICAgICAgICAgPHVsPg0KICAgICAgICAgICAgICAgIDxsaT5Ib21lPC9saT4NCiAgICAgICAgICAgICAgICA8bGk+UHJvZmlsZTwvbGk+DQogICAgICAgICAgICAgICAgPGxpPlNldHRpbmdzPC9saT4NCiAgICAgICAgICAgIDwvdWw+DQogICAgICAgIDwvdGQ+DQoNCiAgICAgICAgPCEtLSBNYWluIENvbnRlbnQgLS0+DQogICAgICAgIDx0ZCBjbGFzcz0ibWFpbiI+DQogICAgICAgICAgICA8aDI+TWFpbiBDb250ZW50PC9oMj4NCiAgICAgICAgICAgIDxwPlRoaXMgaXMgdGhlIGNlbnRyYWwgcGFuZWwuPC9wPg0KICAgICAgICA8L3RkPg0KDQogICAgICAgIDwhLS0gRXh0cmEgUGFuZWwgLS0+DQogICAgICAgIDx0ZCBjbGFzcz0iZXh0cmEiPg0KICAgICAgICAgICAgPGgzPkV4dHJhIFBhbmVsPC9oMz4NCiAgICAgICAgICAgIDxwPkFkZGl0aW9uYWwgaW5mbyBoZXJlLjwvcD4NCiAgICAgICAgPC90ZD4NCiAgICA8L3RyPg0KDQogICAgPCEtLSBGb290ZXIgLS0+DQogICAgPHRyPg0KICAgICAgICA8dGQgY29sc3Bhbj0iMyIgY2xhc3M9ImZvb3RlciI+Rm9vdGVyIGluZm9ybWF0aW9uPC90ZD4NCiAgICA8L3RyPg0KPC90YWJsZT4NCg0KPC9ib2R5Pg0KPC9odG1sPg0KYGBgDQoNCmBgYHtjc3MgZWNobyA9IEZBTFNFfQ0KPHN0eWxlPg0KICAgIGJvZHkgew0KICAgICAgICBtYXJnaW46IDA7DQogICAgICAgIGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsNCiAgICB9DQoNCiAgICB0YWJsZSB7DQogICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICBoZWlnaHQ6IDEwMHZoOw0KICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOw0KICAgIH0NCg0KICAgIHRkIHsNCiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsNCiAgICAgICAgcGFkZGluZzogMTVweDsNCiAgICB9DQoNCiAgICAvKiBIZWFkZXIgKi8NCiAgICAuaGVhZGVyIHsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzJkMWIzZDsNCiAgICAgICAgY29sb3I6IHdoaXRlOw0KICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgICAgIGZvbnQtc2l6ZTogMjhweDsNCiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgICAgIGhlaWdodDogODBweDsNCiAgICB9DQoNCiAgICAvKiBTaWRlYmFyICovDQogICAgLnNpZGViYXIgew0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNkUzMDYxOw0KICAgICAgICBjb2xvcjogd2hpdGU7DQogICAgICAgIHdpZHRoOiAyMCU7DQogICAgfQ0KDQogICAgLyogTWFpbiBjb250ZW50ICovDQogICAgLm1haW4gew0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDNkM2QzOw0KICAgICAgICB3aWR0aDogNjAlOw0KICAgIH0NCg0KICAgIC8qIFJpZ2h0IHBhbmVsICovDQogICAgLmV4dHJhIHsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2JmYmZiZjsNCiAgICAgICAgd2lkdGg6IDIwJTsNCiAgICB9DQoNCiAgICAvKiBGb290ZXIgKi8NCiAgICAuZm9vdGVyIHsNCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzJkMWIzZDsNCiAgICAgICAgY29sb3I6IHdoaXRlOw0KICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgICAgIGhlaWdodDogNTBweDsNCiAgICB9DQoNCiAgICB1bCB7DQogICAgICAgIHBhZGRpbmctbGVmdDogMjBweDsNCiAgICB9DQo8L3N0eWxlPg0KYGBgDQoNCg0KPHRhYmxlPg0KICAgIDwhLS0gSGVhZGVyIC0tPg0KICAgIDx0cj4NCiAgICAgICAgPHRkIGNvbHNwYW49IjMiIGNsYXNzPSJoZWFkZXIiPk15IERhc2hib2FyZDwvdGQ+DQogICAgPC90cj4NCiAgICA8IS0tIE1haW4gUm93IC0tPg0KICAgIDx0cj4NCiAgICAgICAgPCEtLSBTaWRlYmFyIC0tPg0KICAgICAgICA8dGQgY2xhc3M9InNpZGViYXIiPg0KICAgICAgICAgICAgPHVsPg0KICAgICAgICAgICAgICAgIDxsaT5Ib21lPC9saT4NCiAgICAgICAgICAgICAgICA8bGk+UHJvZmlsZTwvbGk+DQogICAgICAgICAgICAgICAgPGxpPlNldHRpbmdzPC9saT4NCiAgICAgICAgICAgIDwvdWw+DQogICAgICAgIDwvdGQ+DQogICAgICAgIDwhLS0gTWFpbiBDb250ZW50IC0tPg0KICAgICAgICA8dGQgY2xhc3M9Im1haW4iPg0KICAgICAgICAgICAgPGgyPk1haW4gQ29udGVudDwvaDI+DQogICAgICAgICAgICA8cD5UaGlzIGlzIHRoZSBjZW50cmFsIHBhbmVsLjwvcD4NCiAgICAgICAgPC90ZD4NCiAgICAgICAgPCEtLSBFeHRyYSBQYW5lbCAtLT4NCiAgICAgICAgPHRkIGNsYXNzPSJleHRyYSI+DQogICAgICAgICAgICA8aDM+RXh0cmEgUGFuZWw8L2gzPg0KICAgICAgICAgICAgPHA+QWRkaXRpb25hbCBpbmZvIGhlcmUuPC9wPg0KICAgICAgICA8L3RkPg0KICAgIDwvdHI+DQogICAgPCEtLSBGb290ZXIgLS0+DQogICAgPHRyPg0KICAgICAgICA8dGQgY29sc3Bhbj0iMyIgY2xhc3M9ImZvb3RlciI+Rm9vdGVyIGluZm9ybWF0aW9uPC90ZD4NCiAgICA8L3RyPg0KPC90YWJsZT4NCg0KDQo=