Skip to content

Instantly share code, notes, and snippets.

@zhxnlai
Created February 19, 2020 23:35
Show Gist options
  • Save zhxnlai/8b4f0c0ead1fa1aa9381eed240513a99 to your computer and use it in GitHub Desktop.
Save zhxnlai/8b4f0c0ead1fa1aa9381eed240513a99 to your computer and use it in GitHub Desktop.
<style id="jsbin-css">
@import url(https://fonts.googleapis.com/css?family=Roboto);
body {
font-family: Roboto, sans-serif !important;
max-width: 650px;
margin: auto;
padding: 1em;
}
h1 {
text-align: center;
border-style: none !important;
padding-bottom: 0 !important;
}
h1, h2, h3, h4, p, ul {
margin-top: 0.5em !important;
margin-bottom: 0.5em !important;
}
c {
display: block;
text-align: center;
}
d {
float: right;
}
t {
}
@media print {
body {
font-size: 14px;
max-width: 1000px;
line-height: 1.4;
}
h1, h2, h3, h4, p, ul {
border-style: none !important;
margin-top: 0.25em !important;
margin-bottom: 0.25em !important;
}
hp {
display: none;
}
}
body {
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
text-size-adjust: 100%;
color: #333;
font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif;
font-size: 16px;
line-height: 1.6;
word-wrap: break-word;
}
body a {
background-color: transparent;
}
body a:active,
body a:hover {
outline: 0;
}
body strong {
font-weight: bold;
}
body h1 {
font-size: 2em;
margin: 0.67em 0;
}
body img {
border: 0;
}
body hr {
box-sizing: content-box;
height: 0;
}
body pre {
overflow: auto;
}
body code,
body kbd,
body pre {
font-family: monospace, monospace;
font-size: 1em;
}
body input {
color: inherit;
font: inherit;
margin: 0;
}
body html input[disabled] {
cursor: default;
}
body input {
line-height: normal;
}
body input[type="checkbox"] {
box-sizing: border-box;
padding: 0;
}
body table {
border-collapse: collapse;
border-spacing: 0;
}
body td,
body th {
padding: 0;
}
body * {
box-sizing: border-box;
}
body input {
font: 13px/1.4 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol";
}
body a {
color: #4078c0;
text-decoration: none;
}
body a:hover,
body a:active {
text-decoration: underline;
}
body hr {
height: 0;
margin: 15px 0;
overflow: hidden;
background: transparent;
border: 0;
border-bottom: 1px solid #ddd;
}
body hr:before {
display: table;
content: "";
}
body hr:after {
display: table;
clear: both;
content: "";
}
body h1,
body h2,
body h3,
body h4,
body h5,
body h6 {
margin-top: 15px;
margin-bottom: 15px;
line-height: 1.1;
}
body h1 {
font-size: 30px;
}
body h2 {
font-size: 21px;
}
body h3 {
font-size: 16px;
}
body h4 {
font-size: 14px;
}
body h5 {
font-size: 12px;
}
body h6 {
font-size: 11px;
}
body blockquote {
margin: 0;
}
body ul,
body ol {
padding: 0;
margin-top: 0;
margin-bottom: 0;
}
body ol ol,
body ul ol {
list-style-type: lower-roman;
}
body ul ul ol,
body ul ol ol,
body ol ul ol,
body ol ol ol {
list-style-type: lower-alpha;
}
body dd {
margin-left: 0;
}
body code {
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
font-size: 12px;
}
body pre {
margin-top: 0;
margin-bottom: 0;
font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace;
}
body .octicon {
font: normal normal normal 16px/1 octicons-anchor;
display: inline-block;
text-decoration: none;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
body .octicon-link:before {
content: '\f05c';
}
body>*:first-child {
margin-top: 0 !important;
}
body>*:last-child {
margin-bottom: 0 !important;
}
body a:not([href]) {
color: inherit;
text-decoration: none;
}
body .anchor {
position: absolute;
top: 0;
left: 0;
display: block;
padding-right: 6px;
padding-left: 30px;
margin-left: -30px;
}
body .anchor:focus {
outline: none;
}
body h1,
body h2,
body h3,
body h4,
body h5,
body h6 {
position: relative;
margin-top: 1em;
margin-bottom: 16px;
font-weight: bold;
line-height: 1.4;
}
body h1 .octicon-link,
body h2 .octicon-link,
body h3 .octicon-link,
body h4 .octicon-link,
body h5 .octicon-link,
body h6 .octicon-link {
display: none;
color: #000;
vertical-align: middle;
}
body h1:hover .anchor,
body h2:hover .anchor,
body h3:hover .anchor,
body h4:hover .anchor,
body h5:hover .anchor,
body h6:hover .anchor {
padding-left: 8px;
margin-left: -30px;
text-decoration: none;
}
body h1:hover .anchor .octicon-link,
body h2:hover .anchor .octicon-link,
body h3:hover .anchor .octicon-link,
body h4:hover .anchor .octicon-link,
body h5:hover .anchor .octicon-link,
body h6:hover .anchor .octicon-link {
display: inline-block;
}
body h1 {
padding-bottom: 0.3em;
font-size: 2.25em;
line-height: 1.2;
border-bottom: 1px solid #eee;
}
body h1 .anchor {
line-height: 1;
}
body h2 {
padding-bottom: 0.3em;
font-size: 1.75em;
line-height: 1.225;
border-bottom: 1px solid #eee;
}
body h2 .anchor {
line-height: 1;
}
body h3 {
font-size: 1.5em;
line-height: 1.43;
}
body h3 .anchor {
line-height: 1.2;
}
body h4 {
font-size: 1.25em;
}
body h4 .anchor {
line-height: 1.2;
}
body h5 {
font-size: 1em;
}
body h5 .anchor {
line-height: 1.1;
}
body h6 {
font-size: 1em;
color: #777;
}
body h6 .anchor {
line-height: 1.1;
}
body p,
body blockquote,
body ul,
body ol,
body dl,
body table,
body pre {
margin-top: 0;
margin-bottom: 16px;
}
body hr {
height: 4px;
padding: 0;
margin: 16px 0;
background-color: #e7e7e7;
border: 0 none;
}
body ul,
body ol {
padding-left: 2em;
}
body ul ul,
body ul ol,
body ol ol,
body ol ul {
margin-top: 0;
margin-bottom: 0;
}
body li>p {
margin-top: 16px;
}
body dl {
padding: 0;
}
body dl dt {
padding: 0;
margin-top: 16px;
font-size: 1em;
font-style: italic;
font-weight: bold;
}
body dl dd {
padding: 0 16px;
margin-bottom: 16px;
}
body blockquote {
padding: 0 15px;
color: #777;
border-left: 4px solid #ddd;
}
body blockquote>:first-child {
margin-top: 0;
}
body blockquote>:last-child {
margin-bottom: 0;
}
body table {
display: block;
width: 100%;
overflow: auto;
word-break: normal;
word-break: keep-all;
}
body table th {
font-weight: bold;
}
body table th,
body table td {
padding: 6px 13px;
border: 1px solid #ddd;
}
body table tr {
background-color: #fff;
border-top: 1px solid #ccc;
}
body table tr:nth-child(2n) {
background-color: #f8f8f8;
}
body img {
max-width: 100%;
box-sizing: border-box;
}
body code {
padding: 0;
padding-top: 0.2em;
padding-bottom: 0.2em;
margin: 0;
font-size: 85%;
background-color: rgba(0,0,0,0.04);
border-radius: 3px;
}
body code:before,
body code:after {
letter-spacing: -0.2em;
content: "\00a0";
}
body pre>code {
padding: 0;
margin: 0;
font-size: 100%;
word-break: normal;
white-space: pre;
background: transparent;
border: 0;
}
body .highlight {
margin-bottom: 16px;
}
body .highlight pre,
body pre {
padding: 16px;
overflow: auto;
font-size: 85%;
line-height: 1.45;
background-color: #f7f7f7;
border-radius: 3px;
}
body .highlight pre {
margin-bottom: 0;
word-break: normal;
}
body pre {
word-wrap: normal;
}
body pre code {
display: inline;
max-width: initial;
padding: 0;
margin: 0;
overflow: initial;
line-height: inherit;
word-wrap: normal;
background-color: transparent;
border: 0;
}
body pre code:before,
body pre code:after {
content: normal;
}
body kbd {
display: inline-block;
padding: 3px 5px;
font-size: 11px;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: solid 1px #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb;
}
body .pl-c {
color: #969896;
}
body .pl-c1,
body .pl-s .pl-v {
color: #0086b3;
}
body .pl-e,
body .pl-en {
color: #795da3;
}
body .pl-s .pl-s1,
body .pl-smi {
color: #333;
}
body .pl-ent {
color: #63a35c;
}
body .pl-k {
color: #a71d5d;
}
body .pl-pds,
body .pl-s,
body .pl-s .pl-pse .pl-s1,
body .pl-sr,
body .pl-sr .pl-cce,
body .pl-sr .pl-sra,
body .pl-sr .pl-sre {
color: #183691;
}
body .pl-v {
color: #ed6a43;
}
body .pl-id {
color: #b52a1d;
}
body .pl-ii {
background-color: #b52a1d;
color: #f8f8f8;
}
body .pl-sr .pl-cce {
color: #63a35c;
font-weight: bold;
}
body .pl-ml {
color: #693a17;
}
body .pl-mh,
body .pl-mh .pl-en,
body .pl-ms {
color: #1d3e81;
font-weight: bold;
}
body .pl-mq {
color: #008080;
}
body .pl-mi {
color: #333;
font-style: italic;
}
body .pl-mb {
color: #333;
font-weight: bold;
}
body .pl-md {
background-color: #ffecec;
color: #bd2c00;
}
body .pl-mi1 {
background-color: #eaffea;
color: #55a532;
}
body .pl-mdr {
color: #795da3;
font-weight: bold;
}
body .pl-mo {
color: #1d3e81;
}
body kbd {
display: inline-block;
padding: 3px 5px;
font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: solid 1px #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb;
}
body .task-list-item {
list-style-type: none;
}
body .task-list-item+.task-list-item {
margin-top: 3px;
}
body .task-list-item input {
margin: 0 0.35em 0.25em -1.6em;
vertical-align: middle;
}
body :checked+.radio-label {
z-index: 1;
position: relative;
border-color: #4078c0;
}
</style>
<h1 id="zhixuan-lai">Zhixuan Lai</h1>
<c>[email protected], Twitter: <a href="https://twitter.com/zhxnlai">@zhxnlai</a>, Github: <a href="https://github.com/zhxnlai">github.com/zhxnlai</a>, Website: <a href="https://zhxnlai.github.io">zhxnlai.github.io</a></c>
<h2 id="experience">Experience</h2>
<h4 id="square">Square</h4>
<p><t>Software Engineer - Cash App Product Platform </t><d>June 2019 - Present</d></p>
<ul>
<li>Build primitive tools and services to speed up developer productivity and feature velocity.</li>
<li>Migrate features out of legacy systems.</li>
<li>Scale systems to Cash App&#39;s growing customer base.</li>
</ul>
<h4 id="tinder">Tinder</h4>
<p><t>Software Engineer - Backend Platform </t><d>Sept 2018 - June 2019</d></p>
<ul>
<li>Improved the event infrastructure and used it to decouple core services.</li>
<li>Maintained and launched experiments to tune the backend recommendation engine.</li>
<li>Modularized the caching layer and migrated it to ElastiCache.</li>
</ul>
<p><t>Software Engineer - Android Platform </t><d>Sept 2016 - Sept 2018</d></p>
<ul>
<li>Developed Tinder Gold on Android, which made Tinder the #1 top grossing app.</li>
<li>Designed frameworks and libraries that enabled other engineers to build user facing features</li>
<li>Modularized the Android app to improve productivity of the growing team</li>
</ul>
<h4 id="google">Google</h4>
<p><t>Software Engineering Intern</t><d>June 2015 — Sept 2015</d></p>
<ul>
<li>Implemented the time bar preview feature for YouTube Android and iOS app</li>
<li>Optimized performance for emerging markets</li>
</ul>
<h4 id="-cdg-labs-https-github-com-cdglabs-viewpoint-research-institute-http-vpri-org-"><a href="https://github.com/cdglabs">CDG Labs</a> / <a href="http://vpri.org/">Viewpoint Research Institute</a></h4>
<p><t>Research Intern</t><d>Mar 2015 — June 2015</d></p>
<ul>
<li>Worked in Alan Kay&#39;s Lab on <a href="http://www.cdglabs.org/prolog/">Prolog Visualizer</a> using <a href="https://github.com/cdglabs/ohm">Ohm</a>, a pattern matching language. Prolog Visualizer is an educational website that renders step by step visualization of the Prolog search tree. We aimed to make it the best way to learn prolog and it was used in UCLA <a href="http://www.cs.ucla.edu/classes/spring15/cs131/">CS131</a> (programming languages) class to teach Prolog</li>
</ul>
<h4 id="-axcel-studio-http-axcelstudio-strikingly-com-"><a href="http://axcelstudio.strikingly.com/">Axcel Studio</a></h4>
<p><t>Tech Co-Founder</t><d>April 2014 — Sept 2014</d></p>
<ul>
<li>Created social networking apps Talkly and Murmur</li>
<li>Accepted into StartupUCLA summer accelerator, class 2014</li>
<li>Pitched to VCs including Lightspeed Venture Partners and DFJ venture</li>
</ul>
<h2 id="projects">Projects</h2>
<h4 id="open-source">Open Source</h4>
<ul>
<li><a href="https://github.com/Tinder/Scarlet">Tinder/Scarlet</a><ul>
<li>A <a href="https://square.github.io/retrofit/">Retrofit</a> inspired library for WebSocket, ServerSentEvent, Socket IO, STOMP, and MQTT written in Kotlin</li>
</ul>
</li>
<li><a href="https://github.com/Tinder/StateMachine">Tinder/StateMachine</a><ul>
<li>A Kotlin DSL for finite state machine</li>
</ul>
</li>
<li><a href="https://github.com/zhxnlai/ZLSwipeableViewSwift">ZLSwipeableViewSwift</a><ul>
<li>A Tinder like UI library originally developed for <a href="https://zhxnlai.github.io/#/murmur">Murmur</a> that has 1.8K+ stars on Github</li>
</ul>
</li>
<li><a href="http://zhxnlai.github.io/printf">Printf Visualizer</a><ul>
<li>A visualizer for printf format string built with React</li>
</ul>
</li>
<li>For more of my open source projects, see: <a href="https://github.com/zhxnlai">https://github.com/zhxnlai</a></li>
</ul>
<h4 id="conferences">Conferences</h4>
<ul>
<li><a href="https://speakerdeck.com/zhxnlai/taming-websocket-with-scarlet-droidcon-sf">Taming WebSocket With Scarlet</a><ul>
<li>Speaker at droidcon SF 2018, Devoxx Morocco 2018, Mobile Era 2018, Mobiconf 2018, and Conference for Kotliners 2018</li>
</ul>
</li>
<li><a href="https://www.slideshare.net/secret/JvqBLgou0REKdK">24K Magic with Shimmy</a><ul>
<li>Speaker at DevFest LA 2017</li>
</ul>
</li>
</ul>
<h4 id="awards">Awards</h4>
<ul>
<li><a href="https://developer.apple.com/wwdc/scholarships/">Student scholarship</a> winner at WWDC 2015</li>
<li><a href="https://zhxnlai.github.io/#/horoscoper">Horoscoper</a>, winner of Top Ten and Best VR Hack at HackUCI 2014<ul>
<li>A multiplayer virtual planetarium simulator for Oculus Rift developed with Unity3d</li>
</ul>
</li>
<li><a href="https://zhxnlai.github.io/#/intersolar">Intersolar</a>, HackSC 2014<ul>
<li>A virtual solar system based on Horoscoper, featuring enhanced graphics and arm gesture control using Myo</li>
</ul>
</li>
<li><a href="https://zhxnlai.github.io/#/spacinarium">Spacinarium</a>, winner of DAQRI grand price at LAHacks 2014<ul>
<li>A multiplayer AR game developed with Unity3d, Vuforia and DAQRI Instant On</li>
</ul>
</li>
</ul>
<h2 id="education">Education</h2>
<p><t>University of California, Los Angeles (UCLA)</t><d>2012 - 2016</d></p>
<ul>
<li>Mathematics of Computation B.S.</li>
</ul>
<script id="jsbin-source-html" type="text/html"># Zhixuan Lai
<c>[email protected], Twitter: [@zhxnlai](https://twitter.com/zhxnlai), Github: [github.com/zhxnlai](https://github.com/zhxnlai), Website: [zhxnlai.github.io](https://zhxnlai.github.io)</c>
Experience
---
#### Square
<t>Software Engineer - Cash App Product Platform </t><d>June 2019 - Present</d>
- Build primitive tools and services to speed up developer productivity and feature velocity.
- Migrate features out of legacy systems.
- Scale systems to Cash App's growing customer base.
#### Tinder
<t>Software Engineer - Backend Platform </t><d>Sept 2018 - June 2019</d>
- Improved the event infrastructure and used it to decouple core services.
- Maintained and launched experiments to tune the backend recommendation engine.
- Modularized the caching layer and migrated it to ElastiCache.
<t>Software Engineer - Android Platform </t><d>Sept 2016 - Sept 2018</d>
- Developed Tinder Gold on Android, which made Tinder the #1 top grossing app.
- Designed frameworks and libraries that enabled other engineers to build user facing features
- Modularized the Android app to improve productivity of the growing team
#### Google
<t>Software Engineering Intern</t><d>June 2015 — Sept 2015</d>
- Implemented the time bar preview feature for YouTube Android and iOS app
- Optimized performance for emerging markets
#### [CDG Labs](https://github.com/cdglabs) / [Viewpoint Research Institute](http://vpri.org/)
<t>Research Intern</t><d>Mar 2015 — June 2015</d>
- Worked in Alan Kay's Lab on [Prolog Visualizer](http://www.cdglabs.org/prolog/) using [Ohm](https://github.com/cdglabs/ohm), a pattern matching language. Prolog Visualizer is an educational website that renders step by step visualization of the Prolog search tree. We aimed to make it the best way to learn prolog and it was used in UCLA [CS131](http://www.cs.ucla.edu/classes/spring15/cs131/) (programming languages) class to teach Prolog
#### [Axcel Studio](http://axcelstudio.strikingly.com/)
<t>Tech Co-Founder</t><d>April 2014 — Sept 2014</d>
- Created social networking apps Talkly and Murmur
- Accepted into StartupUCLA summer accelerator, class 2014
- Pitched to VCs including Lightspeed Venture Partners and DFJ venture
Projects
---
#### Open Source
- [Tinder/Scarlet](https://github.com/Tinder/Scarlet)
- A [Retrofit](https://square.github.io/retrofit/) inspired library for WebSocket, ServerSentEvent, Socket IO, STOMP, and MQTT written in Kotlin
- [Tinder/StateMachine](https://github.com/Tinder/StateMachine)
- A Kotlin DSL for finite state machine
- [ZLSwipeableViewSwift](https://github.com/zhxnlai/ZLSwipeableViewSwift)
- A Tinder like UI library originally developed for [Murmur](https://zhxnlai.github.io/#/murmur) that has 1.8K+ stars on Github
- [Printf Visualizer](http://zhxnlai.github.io/printf)
- A visualizer for printf format string built with React
- For more of my open source projects, see: https://github.com/zhxnlai
#### Conferences
- [Taming WebSocket With Scarlet](https://speakerdeck.com/zhxnlai/taming-websocket-with-scarlet-droidcon-sf)
- Speaker at droidcon SF 2018, Devoxx Morocco 2018, Mobile Era 2018, Mobiconf 2018, and Conference for Kotliners 2018
- [24K Magic with Shimmy](https://www.slideshare.net/secret/JvqBLgou0REKdK)
- Speaker at DevFest LA 2017
#### Awards
- [Student scholarship](https://developer.apple.com/wwdc/scholarships/) winner at WWDC 2015
- [Horoscoper](https://zhxnlai.github.io/#/horoscoper), winner of Top Ten and Best VR Hack at HackUCI 2014
- A multiplayer virtual planetarium simulator for Oculus Rift developed with Unity3d
- [Intersolar](https://zhxnlai.github.io/#/intersolar), HackSC 2014
- A virtual solar system based on Horoscoper, featuring enhanced graphics and arm gesture control using Myo
- [Spacinarium](https://zhxnlai.github.io/#/spacinarium), winner of DAQRI grand price at LAHacks 2014
- A multiplayer AR game developed with Unity3d, Vuforia and DAQRI Instant On
Education
---
<t>University of California, Los Angeles (UCLA)</t><d>2012 - 2016</d>
- Mathematics of Computation B.S.
</script>
<script id="jsbin-source-css" type="text/css">@import url(https://fonts.googleapis.com/css?family=Roboto);
body {
font-family: Roboto, sans-serif !important;
max-width: 650px;
margin: auto;
padding: 1em;
}
h1 {
text-align: center;
border-style: none !important;
padding-bottom: 0 !important;
}
h1, h2, h3, h4, p, ul {
margin-top: 0.5em !important;
margin-bottom: 0.5em !important;
}
c {
display: block;
text-align: center;
}
d {
float: right;
}
t {
}
@media print {
body {
font-size: 14px;
max-width: 1000px;
line-height: 1.4;
}
h1, h2, h3, h4, p, ul {
border-style: none !important;
margin-top: 0.25em !important;
margin-bottom: 0.25em !important;
}
hp {
display: none;
}
}
body {
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
text-size-adjust: 100%;
color: #333;
font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif;
font-size: 16px;
line-height: 1.6;
word-wrap: break-word;
}
body a {
background-color: transparent;
}
body a:active,
body a:hover {
outline: 0;
}
body strong {
font-weight: bold;
}
body h1 {
font-size: 2em;
margin: 0.67em 0;
}
body img {
border: 0;
}
body hr {
box-sizing: content-box;
height: 0;
}
body pre {
overflow: auto;
}
body code,
body kbd,
body pre {
font-family: monospace, monospace;
font-size: 1em;
}
body input {
color: inherit;
font: inherit;
margin: 0;
}
body html input[disabled] {
cursor: default;
}
body input {
line-height: normal;
}
body input[type="checkbox"] {
box-sizing: border-box;
padding: 0;
}
body table {
border-collapse: collapse;
border-spacing: 0;
}
body td,
body th {
padding: 0;
}
body * {
box-sizing: border-box;
}
body input {
font: 13px/1.4 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol";
}
body a {
color: #4078c0;
text-decoration: none;
}
body a:hover,
body a:active {
text-decoration: underline;
}
body hr {
height: 0;
margin: 15px 0;
overflow: hidden;
background: transparent;
border: 0;
border-bottom: 1px solid #ddd;
}
body hr:before {
display: table;
content: "";
}
body hr:after {
display: table;
clear: both;
content: "";
}
body h1,
body h2,
body h3,
body h4,
body h5,
body h6 {
margin-top: 15px;
margin-bottom: 15px;
line-height: 1.1;
}
body h1 {
font-size: 30px;
}
body h2 {
font-size: 21px;
}
body h3 {
font-size: 16px;
}
body h4 {
font-size: 14px;
}
body h5 {
font-size: 12px;
}
body h6 {
font-size: 11px;
}
body blockquote {
margin: 0;
}
body ul,
body ol {
padding: 0;
margin-top: 0;
margin-bottom: 0;
}
body ol ol,
body ul ol {
list-style-type: lower-roman;
}
body ul ul ol,
body ul ol ol,
body ol ul ol,
body ol ol ol {
list-style-type: lower-alpha;
}
body dd {
margin-left: 0;
}
body code {
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
font-size: 12px;
}
body pre {
margin-top: 0;
margin-bottom: 0;
font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace;
}
body .octicon {
font: normal normal normal 16px/1 octicons-anchor;
display: inline-block;
text-decoration: none;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
body .octicon-link:before {
content: '\f05c';
}
body>*:first-child {
margin-top: 0 !important;
}
body>*:last-child {
margin-bottom: 0 !important;
}
body a:not([href]) {
color: inherit;
text-decoration: none;
}
body .anchor {
position: absolute;
top: 0;
left: 0;
display: block;
padding-right: 6px;
padding-left: 30px;
margin-left: -30px;
}
body .anchor:focus {
outline: none;
}
body h1,
body h2,
body h3,
body h4,
body h5,
body h6 {
position: relative;
margin-top: 1em;
margin-bottom: 16px;
font-weight: bold;
line-height: 1.4;
}
body h1 .octicon-link,
body h2 .octicon-link,
body h3 .octicon-link,
body h4 .octicon-link,
body h5 .octicon-link,
body h6 .octicon-link {
display: none;
color: #000;
vertical-align: middle;
}
body h1:hover .anchor,
body h2:hover .anchor,
body h3:hover .anchor,
body h4:hover .anchor,
body h5:hover .anchor,
body h6:hover .anchor {
padding-left: 8px;
margin-left: -30px;
text-decoration: none;
}
body h1:hover .anchor .octicon-link,
body h2:hover .anchor .octicon-link,
body h3:hover .anchor .octicon-link,
body h4:hover .anchor .octicon-link,
body h5:hover .anchor .octicon-link,
body h6:hover .anchor .octicon-link {
display: inline-block;
}
body h1 {
padding-bottom: 0.3em;
font-size: 2.25em;
line-height: 1.2;
border-bottom: 1px solid #eee;
}
body h1 .anchor {
line-height: 1;
}
body h2 {
padding-bottom: 0.3em;
font-size: 1.75em;
line-height: 1.225;
border-bottom: 1px solid #eee;
}
body h2 .anchor {
line-height: 1;
}
body h3 {
font-size: 1.5em;
line-height: 1.43;
}
body h3 .anchor {
line-height: 1.2;
}
body h4 {
font-size: 1.25em;
}
body h4 .anchor {
line-height: 1.2;
}
body h5 {
font-size: 1em;
}
body h5 .anchor {
line-height: 1.1;
}
body h6 {
font-size: 1em;
color: #777;
}
body h6 .anchor {
line-height: 1.1;
}
body p,
body blockquote,
body ul,
body ol,
body dl,
body table,
body pre {
margin-top: 0;
margin-bottom: 16px;
}
body hr {
height: 4px;
padding: 0;
margin: 16px 0;
background-color: #e7e7e7;
border: 0 none;
}
body ul,
body ol {
padding-left: 2em;
}
body ul ul,
body ul ol,
body ol ol,
body ol ul {
margin-top: 0;
margin-bottom: 0;
}
body li>p {
margin-top: 16px;
}
body dl {
padding: 0;
}
body dl dt {
padding: 0;
margin-top: 16px;
font-size: 1em;
font-style: italic;
font-weight: bold;
}
body dl dd {
padding: 0 16px;
margin-bottom: 16px;
}
body blockquote {
padding: 0 15px;
color: #777;
border-left: 4px solid #ddd;
}
body blockquote>:first-child {
margin-top: 0;
}
body blockquote>:last-child {
margin-bottom: 0;
}
body table {
display: block;
width: 100%;
overflow: auto;
word-break: normal;
word-break: keep-all;
}
body table th {
font-weight: bold;
}
body table th,
body table td {
padding: 6px 13px;
border: 1px solid #ddd;
}
body table tr {
background-color: #fff;
border-top: 1px solid #ccc;
}
body table tr:nth-child(2n) {
background-color: #f8f8f8;
}
body img {
max-width: 100%;
box-sizing: border-box;
}
body code {
padding: 0;
padding-top: 0.2em;
padding-bottom: 0.2em;
margin: 0;
font-size: 85%;
background-color: rgba(0,0,0,0.04);
border-radius: 3px;
}
body code:before,
body code:after {
letter-spacing: -0.2em;
content: "\00a0";
}
body pre>code {
padding: 0;
margin: 0;
font-size: 100%;
word-break: normal;
white-space: pre;
background: transparent;
border: 0;
}
body .highlight {
margin-bottom: 16px;
}
body .highlight pre,
body pre {
padding: 16px;
overflow: auto;
font-size: 85%;
line-height: 1.45;
background-color: #f7f7f7;
border-radius: 3px;
}
body .highlight pre {
margin-bottom: 0;
word-break: normal;
}
body pre {
word-wrap: normal;
}
body pre code {
display: inline;
max-width: initial;
padding: 0;
margin: 0;
overflow: initial;
line-height: inherit;
word-wrap: normal;
background-color: transparent;
border: 0;
}
body pre code:before,
body pre code:after {
content: normal;
}
body kbd {
display: inline-block;
padding: 3px 5px;
font-size: 11px;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: solid 1px #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb;
}
body .pl-c {
color: #969896;
}
body .pl-c1,
body .pl-s .pl-v {
color: #0086b3;
}
body .pl-e,
body .pl-en {
color: #795da3;
}
body .pl-s .pl-s1,
body .pl-smi {
color: #333;
}
body .pl-ent {
color: #63a35c;
}
body .pl-k {
color: #a71d5d;
}
body .pl-pds,
body .pl-s,
body .pl-s .pl-pse .pl-s1,
body .pl-sr,
body .pl-sr .pl-cce,
body .pl-sr .pl-sra,
body .pl-sr .pl-sre {
color: #183691;
}
body .pl-v {
color: #ed6a43;
}
body .pl-id {
color: #b52a1d;
}
body .pl-ii {
background-color: #b52a1d;
color: #f8f8f8;
}
body .pl-sr .pl-cce {
color: #63a35c;
font-weight: bold;
}
body .pl-ml {
color: #693a17;
}
body .pl-mh,
body .pl-mh .pl-en,
body .pl-ms {
color: #1d3e81;
font-weight: bold;
}
body .pl-mq {
color: #008080;
}
body .pl-mi {
color: #333;
font-style: italic;
}
body .pl-mb {
color: #333;
font-weight: bold;
}
body .pl-md {
background-color: #ffecec;
color: #bd2c00;
}
body .pl-mi1 {
background-color: #eaffea;
color: #55a532;
}
body .pl-mdr {
color: #795da3;
font-weight: bold;
}
body .pl-mo {
color: #1d3e81;
}
body kbd {
display: inline-block;
padding: 3px 5px;
font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: solid 1px #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb;
}
body .task-list-item {
list-style-type: none;
}
body .task-list-item+.task-list-item {
margin-top: 3px;
}
body .task-list-item input {
margin: 0 0.35em 0.25em -1.6em;
vertical-align: middle;
}
body :checked+.radio-label {
z-index: 1;
position: relative;
border-color: #4078c0;
}
</script>
@import url(https://fonts.googleapis.com/css?family=Roboto);
body {
font-family: Roboto, sans-serif !important;
max-width: 650px;
margin: auto;
padding: 1em;
}
h1 {
text-align: center;
border-style: none !important;
padding-bottom: 0 !important;
}
h1, h2, h3, h4, p, ul {
margin-top: 0.5em !important;
margin-bottom: 0.5em !important;
}
c {
display: block;
text-align: center;
}
d {
float: right;
}
t {
}
@media print {
body {
font-size: 14px;
max-width: 1000px;
line-height: 1.4;
}
h1, h2, h3, h4, p, ul {
border-style: none !important;
margin-top: 0.25em !important;
margin-bottom: 0.25em !important;
}
hp {
display: none;
}
}
body {
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
text-size-adjust: 100%;
color: #333;
font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif;
font-size: 16px;
line-height: 1.6;
word-wrap: break-word;
}
body a {
background-color: transparent;
}
body a:active,
body a:hover {
outline: 0;
}
body strong {
font-weight: bold;
}
body h1 {
font-size: 2em;
margin: 0.67em 0;
}
body img {
border: 0;
}
body hr {
box-sizing: content-box;
height: 0;
}
body pre {
overflow: auto;
}
body code,
body kbd,
body pre {
font-family: monospace, monospace;
font-size: 1em;
}
body input {
color: inherit;
font: inherit;
margin: 0;
}
body html input[disabled] {
cursor: default;
}
body input {
line-height: normal;
}
body input[type="checkbox"] {
box-sizing: border-box;
padding: 0;
}
body table {
border-collapse: collapse;
border-spacing: 0;
}
body td,
body th {
padding: 0;
}
body * {
box-sizing: border-box;
}
body input {
font: 13px/1.4 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol";
}
body a {
color: #4078c0;
text-decoration: none;
}
body a:hover,
body a:active {
text-decoration: underline;
}
body hr {
height: 0;
margin: 15px 0;
overflow: hidden;
background: transparent;
border: 0;
border-bottom: 1px solid #ddd;
}
body hr:before {
display: table;
content: "";
}
body hr:after {
display: table;
clear: both;
content: "";
}
body h1,
body h2,
body h3,
body h4,
body h5,
body h6 {
margin-top: 15px;
margin-bottom: 15px;
line-height: 1.1;
}
body h1 {
font-size: 30px;
}
body h2 {
font-size: 21px;
}
body h3 {
font-size: 16px;
}
body h4 {
font-size: 14px;
}
body h5 {
font-size: 12px;
}
body h6 {
font-size: 11px;
}
body blockquote {
margin: 0;
}
body ul,
body ol {
padding: 0;
margin-top: 0;
margin-bottom: 0;
}
body ol ol,
body ul ol {
list-style-type: lower-roman;
}
body ul ul ol,
body ul ol ol,
body ol ul ol,
body ol ol ol {
list-style-type: lower-alpha;
}
body dd {
margin-left: 0;
}
body code {
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
font-size: 12px;
}
body pre {
margin-top: 0;
margin-bottom: 0;
font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace;
}
body .octicon {
font: normal normal normal 16px/1 octicons-anchor;
display: inline-block;
text-decoration: none;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
body .octicon-link:before {
content: '\f05c';
}
body>*:first-child {
margin-top: 0 !important;
}
body>*:last-child {
margin-bottom: 0 !important;
}
body a:not([href]) {
color: inherit;
text-decoration: none;
}
body .anchor {
position: absolute;
top: 0;
left: 0;
display: block;
padding-right: 6px;
padding-left: 30px;
margin-left: -30px;
}
body .anchor:focus {
outline: none;
}
body h1,
body h2,
body h3,
body h4,
body h5,
body h6 {
position: relative;
margin-top: 1em;
margin-bottom: 16px;
font-weight: bold;
line-height: 1.4;
}
body h1 .octicon-link,
body h2 .octicon-link,
body h3 .octicon-link,
body h4 .octicon-link,
body h5 .octicon-link,
body h6 .octicon-link {
display: none;
color: #000;
vertical-align: middle;
}
body h1:hover .anchor,
body h2:hover .anchor,
body h3:hover .anchor,
body h4:hover .anchor,
body h5:hover .anchor,
body h6:hover .anchor {
padding-left: 8px;
margin-left: -30px;
text-decoration: none;
}
body h1:hover .anchor .octicon-link,
body h2:hover .anchor .octicon-link,
body h3:hover .anchor .octicon-link,
body h4:hover .anchor .octicon-link,
body h5:hover .anchor .octicon-link,
body h6:hover .anchor .octicon-link {
display: inline-block;
}
body h1 {
padding-bottom: 0.3em;
font-size: 2.25em;
line-height: 1.2;
border-bottom: 1px solid #eee;
}
body h1 .anchor {
line-height: 1;
}
body h2 {
padding-bottom: 0.3em;
font-size: 1.75em;
line-height: 1.225;
border-bottom: 1px solid #eee;
}
body h2 .anchor {
line-height: 1;
}
body h3 {
font-size: 1.5em;
line-height: 1.43;
}
body h3 .anchor {
line-height: 1.2;
}
body h4 {
font-size: 1.25em;
}
body h4 .anchor {
line-height: 1.2;
}
body h5 {
font-size: 1em;
}
body h5 .anchor {
line-height: 1.1;
}
body h6 {
font-size: 1em;
color: #777;
}
body h6 .anchor {
line-height: 1.1;
}
body p,
body blockquote,
body ul,
body ol,
body dl,
body table,
body pre {
margin-top: 0;
margin-bottom: 16px;
}
body hr {
height: 4px;
padding: 0;
margin: 16px 0;
background-color: #e7e7e7;
border: 0 none;
}
body ul,
body ol {
padding-left: 2em;
}
body ul ul,
body ul ol,
body ol ol,
body ol ul {
margin-top: 0;
margin-bottom: 0;
}
body li>p {
margin-top: 16px;
}
body dl {
padding: 0;
}
body dl dt {
padding: 0;
margin-top: 16px;
font-size: 1em;
font-style: italic;
font-weight: bold;
}
body dl dd {
padding: 0 16px;
margin-bottom: 16px;
}
body blockquote {
padding: 0 15px;
color: #777;
border-left: 4px solid #ddd;
}
body blockquote>:first-child {
margin-top: 0;
}
body blockquote>:last-child {
margin-bottom: 0;
}
body table {
display: block;
width: 100%;
overflow: auto;
word-break: normal;
word-break: keep-all;
}
body table th {
font-weight: bold;
}
body table th,
body table td {
padding: 6px 13px;
border: 1px solid #ddd;
}
body table tr {
background-color: #fff;
border-top: 1px solid #ccc;
}
body table tr:nth-child(2n) {
background-color: #f8f8f8;
}
body img {
max-width: 100%;
box-sizing: border-box;
}
body code {
padding: 0;
padding-top: 0.2em;
padding-bottom: 0.2em;
margin: 0;
font-size: 85%;
background-color: rgba(0,0,0,0.04);
border-radius: 3px;
}
body code:before,
body code:after {
letter-spacing: -0.2em;
content: "\00a0";
}
body pre>code {
padding: 0;
margin: 0;
font-size: 100%;
word-break: normal;
white-space: pre;
background: transparent;
border: 0;
}
body .highlight {
margin-bottom: 16px;
}
body .highlight pre,
body pre {
padding: 16px;
overflow: auto;
font-size: 85%;
line-height: 1.45;
background-color: #f7f7f7;
border-radius: 3px;
}
body .highlight pre {
margin-bottom: 0;
word-break: normal;
}
body pre {
word-wrap: normal;
}
body pre code {
display: inline;
max-width: initial;
padding: 0;
margin: 0;
overflow: initial;
line-height: inherit;
word-wrap: normal;
background-color: transparent;
border: 0;
}
body pre code:before,
body pre code:after {
content: normal;
}
body kbd {
display: inline-block;
padding: 3px 5px;
font-size: 11px;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: solid 1px #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb;
}
body .pl-c {
color: #969896;
}
body .pl-c1,
body .pl-s .pl-v {
color: #0086b3;
}
body .pl-e,
body .pl-en {
color: #795da3;
}
body .pl-s .pl-s1,
body .pl-smi {
color: #333;
}
body .pl-ent {
color: #63a35c;
}
body .pl-k {
color: #a71d5d;
}
body .pl-pds,
body .pl-s,
body .pl-s .pl-pse .pl-s1,
body .pl-sr,
body .pl-sr .pl-cce,
body .pl-sr .pl-sra,
body .pl-sr .pl-sre {
color: #183691;
}
body .pl-v {
color: #ed6a43;
}
body .pl-id {
color: #b52a1d;
}
body .pl-ii {
background-color: #b52a1d;
color: #f8f8f8;
}
body .pl-sr .pl-cce {
color: #63a35c;
font-weight: bold;
}
body .pl-ml {
color: #693a17;
}
body .pl-mh,
body .pl-mh .pl-en,
body .pl-ms {
color: #1d3e81;
font-weight: bold;
}
body .pl-mq {
color: #008080;
}
body .pl-mi {
color: #333;
font-style: italic;
}
body .pl-mb {
color: #333;
font-weight: bold;
}
body .pl-md {
background-color: #ffecec;
color: #bd2c00;
}
body .pl-mi1 {
background-color: #eaffea;
color: #55a532;
}
body .pl-mdr {
color: #795da3;
font-weight: bold;
}
body .pl-mo {
color: #1d3e81;
}
body kbd {
display: inline-block;
padding: 3px 5px;
font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: solid 1px #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb;
}
body .task-list-item {
list-style-type: none;
}
body .task-list-item+.task-list-item {
margin-top: 3px;
}
body .task-list-item input {
margin: 0 0.35em 0.25em -1.6em;
vertical-align: middle;
}
body :checked+.radio-label {
z-index: 1;
position: relative;
border-color: #4078c0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment