Repository: boyney123/github-actions Branch: master Commit: e049d3c6f803 Files: 140 Total size: 1.0 MB Directory structure: gitextract_me2v_ca3/ ├── .all-contributorsrc ├── .gitignore ├── .nvmrc ├── .prettierrc ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── functions/ │ └── github.js ├── gatsby-browser.js ├── gatsby-config.js ├── gatsby-node.js ├── gatsby-ssr.js ├── netlify.toml ├── package.json └── src/ ├── actions/ │ ├── PHP-Lint.md │ ├── a-branch-cleanup.md │ ├── aloba.md │ ├── android.md │ ├── apprise-ga.md │ ├── assignee-to-reviewer.md │ ├── automerge.md │ ├── aws-sam.md │ ├── aws.md │ ├── azure.md │ ├── azure_node.md │ ├── cake-tasks.md │ ├── clojure-formatter.md │ ├── cloudflare-worker.md │ ├── composer.md │ ├── cowsays.md │ ├── dart-formatter.md │ ├── digitalocean.md │ ├── discord-notification.md │ ├── dnscontrol-action.md │ ├── docker-linter.md │ ├── docker.md │ ├── ember-cli.md │ ├── firebase.md │ ├── gatsby-cli.md │ ├── ghpages.md │ ├── git-auto-commit-action.md │ ├── gitcret.md │ ├── github-deployments.md │ ├── github-push-action.md │ ├── github-wiki.md │ ├── golang.md │ ├── google-cloud-platform.md │ ├── goreleaser.md │ ├── gradle.md │ ├── graphql-inspector.md │ ├── hadolint.md │ ├── heroku.md │ ├── home-assistant.md │ ├── httpie-action.md │ ├── hugo-to-github-pages.md │ ├── install-qt-action.md │ ├── issue-label-manager.md │ ├── jekyll-builds-on-github-pages.md │ ├── jenkins-single-shot.md │ ├── js-build-tools.md │ ├── lint-pull-request.md │ ├── mercure.md │ ├── mjolnir.md │ ├── my-broken-link-checker.md │ ├── netlify-build.md │ ├── netlify-cli.md │ ├── netlify-diff-includes.md │ ├── nexmo-sms.md │ ├── node-code-formatter.md │ ├── notify-slack-action.md │ ├── npm-audit-fix.md │ ├── npm-cli.md │ ├── okteto.md │ ├── pandoc.md │ ├── php-code-fixer.md │ ├── php-stan.md │ ├── phpqa.md │ ├── powershell-formatter.md │ ├── pr-status-giphy.md │ ├── psake.md │ ├── publish-puppet-forge.md │ ├── publish-wordpress-plugin.md │ ├── pulumi.md │ ├── py-lambda-action.md │ ├── pypi-publish.md │ ├── rebase-pr.md │ ├── release-archive.md │ ├── release_notify.md │ ├── repetitive.md │ ├── rstats.md │ ├── rsync.md │ ├── ruby-gems.md │ ├── ruby-linter.md │ ├── run-github-actions-locally.md │ ├── semantic-release-action.md │ ├── send-emails.md │ ├── setup-flutter.md │ ├── setup-php.md │ ├── shaking-finger.md │ ├── size-label-action.md │ ├── slack-message-as-bot.md │ ├── slack-message.md │ ├── sleep.md │ ├── spothub.md │ ├── ssh.md │ ├── storybook-surge.md │ ├── synk-cli.md │ ├── terraform.md │ ├── tslint-linter.md │ ├── tweet.md │ ├── twitter-action.md │ ├── vamp.md │ ├── vscode-vsce.md │ ├── wait-for-200.md │ ├── webpack-stats-to-packtracker.md │ ├── wemake-python-styleguide.md │ ├── wip.md │ ├── wordpress-dotorg-plugin-deploy.md │ ├── wordpress-plugin-asset-update.md │ ├── wordpress-pot-generator.md │ ├── wp-text-domain.md │ ├── yarn.md │ ├── zeit-now.md │ └── zola-deploy.md ├── components/ │ ├── Action-Card/ │ │ ├── index.js │ │ └── styles.css │ ├── ActionHeader/ │ │ └── index.js │ ├── Footer/ │ │ ├── index.js │ │ └── styles.css │ ├── Navigation/ │ │ ├── index.js │ │ └── styles.css │ ├── SiteHeader/ │ │ └── index.js │ ├── layout.css │ └── layout.js ├── functions/ │ └── github.js ├── images/ │ └── .gitkeep ├── pages/ │ ├── 404.js │ └── index.js └── templates/ ├── blog-post.css └── blog-post.js ================================================ FILE CONTENTS ================================================ ================================================ FILE: .all-contributorsrc ================================================ { "projectName": "github-actions", "projectOwner": "boyney123", "repoType": "github", "repoHost": "https://github.com", "files": [ "README.md" ], "imageSize": 100, "commit": true, "contributors": [ { "login": "boyney123", "name": "David Boyne", "avatar_url": "https://avatars1.githubusercontent.com/u/3268013?v=4", "profile": "https://medium.com/@boyney123", "contributions": [ "code" ] }, { "login": "bltavares", "name": "Bruno Tavares", "avatar_url": "https://avatars1.githubusercontent.com/u/109474?v=4", "profile": "http://bltavares.com", "contributions": [ "doc" ] }, { "login": "pascalgn", "name": "Pascal", "avatar_url": "https://avatars2.githubusercontent.com/u/432333?v=4", "profile": "https://twitter.com/pascalgn", "contributions": [ "doc", "code" ] }, { "login": "pxgamer", "name": "Owen Voke", "avatar_url": "https://avatars0.githubusercontent.com/u/1899334?v=4", "profile": "https://pxgamer.xyz", "contributions": [ "doc" ] }, { "login": "maxheld83", "name": "Maximilian Held", "avatar_url": "https://avatars0.githubusercontent.com/u/5372770?v=4", "profile": "http://www.maxheld.de/", "contributions": [ "doc" ] }, { "login": "jzweifel", "name": "Jacob Zweifel", "avatar_url": "https://avatars0.githubusercontent.com/u/39281691?v=4", "profile": "https://github.com/jzweifel", "contributions": [ "doc" ] }, { "login": "mscoutermarsh", "name": "Mike Coutermarsh", "avatar_url": "https://avatars0.githubusercontent.com/u/155044?v=4", "profile": "https://mikecoutermarsh.com", "contributions": [ "doc" ] }, { "login": "jonico", "name": "Johannes Nicolai", "avatar_url": "https://avatars3.githubusercontent.com/u/1872314?v=4", "profile": "https://github.com/jonico", "contributions": [ "doc" ] }, { "login": "Ilshidur", "name": "Nicolas Coutin", "avatar_url": "https://avatars1.githubusercontent.com/u/6564012?v=4", "profile": "https://nicolas-coutin.fr", "contributions": [ "code" ] }, { "login": "mariamrf", "name": "Mariam Maarouf", "avatar_url": "https://avatars0.githubusercontent.com/u/10760189?v=4", "profile": "https://maarouf.me", "contributions": [ "code" ] }, { "login": "ldez", "name": "Ludovic Fernandez", "avatar_url": "https://avatars0.githubusercontent.com/u/5674651?v=4", "profile": "https://twitter.com/ludnadez", "contributions": [ "doc" ] }, { "login": "michaelw90", "name": "Michael Wright", "avatar_url": "https://avatars1.githubusercontent.com/u/348317?v=4", "profile": "http://codular.com", "contributions": [ "doc" ] }, { "login": "jeffpaul", "name": "Jeffrey Paul", "avatar_url": "https://avatars2.githubusercontent.com/u/2818133?v=4", "profile": "https://jeffpaul.com/", "contributions": [ "doc" ] }, { "login": "cstuder", "name": "Christian Studer", "avatar_url": "https://avatars0.githubusercontent.com/u/288493?v=4", "profile": "https://hymnos.existenz.ch", "contributions": [ "doc" ] }, { "login": "andrewsomething", "name": "Andrew Starr-Bochicchio", "avatar_url": "https://avatars0.githubusercontent.com/u/46943?v=4", "profile": "http://blog.andrewsomething.com/", "contributions": [ "doc" ] }, { "login": "MrRhodes", "name": "Stephen Rhodes", "avatar_url": "https://avatars3.githubusercontent.com/u/130488?v=4", "profile": "http://www.linkedin.com/in/sterhodes", "contributions": [ "code" ] }, { "login": "varunsridharan", "name": "Varun Sridharan", "avatar_url": "https://avatars1.githubusercontent.com/u/1884287?v=4", "profile": "http://varunsridharan.in", "contributions": [ "doc" ] }, { "login": "shivammathur", "name": "Shivam Mathur", "avatar_url": "https://avatars1.githubusercontent.com/u/1571086?v=4", "profile": "https://shivammathur.com", "contributions": [ "doc" ] }, { "login": "tnc1997", "name": "Thomas Clark", "avatar_url": "https://avatars1.githubusercontent.com/u/17160067?v=4", "profile": "https://github.com/tnc1997", "contributions": [ "doc" ] }, { "login": "MarvinJWendt", "name": "MarvinJWendt", "avatar_url": "https://avatars0.githubusercontent.com/u/31022056?v=4", "profile": "https://marvinjwendt.com", "contributions": [ "doc" ] }, { "login": "jurplel", "name": "Benjamin O", "avatar_url": "https://avatars0.githubusercontent.com/u/10716694?v=4", "profile": "http://interversehq.com", "contributions": [ "doc" ] }, { "login": "webknjaz", "name": "Sviatoslav Sydorenko", "avatar_url": "https://avatars2.githubusercontent.com/u/578543?v=4", "profile": "https://webknjaz.me", "contributions": [ "doc" ] }, { "login": "barnumbirr", "name": "Martin Simon", "avatar_url": "https://avatars1.githubusercontent.com/u/2029239?v=4", "profile": "https://martinsimon.me/", "contributions": [ "doc" ] }, { "login": "cycjimmy", "name": "Geoffrey.C", "avatar_url": "https://avatars1.githubusercontent.com/u/19383787?v=4", "profile": "https://www.cycjimmy.tech", "contributions": [ "doc" ] }, { "login": "ad-m", "name": "Adam Dobrawy", "avatar_url": "https://avatars1.githubusercontent.com/u/3618479?v=4", "profile": "http://ochrona.jawne.info.pl", "contributions": [ "doc" ] }, { "login": "NiklasMerz", "name": "Niklas Merz", "avatar_url": "https://avatars0.githubusercontent.com/u/3585860?v=4", "profile": "https://blog.merzlabs.com/authors/niklas-merz/", "contributions": [ "doc" ] }, { "login": "sobolevn", "name": "Nikita Sobolev", "avatar_url": "https://avatars1.githubusercontent.com/u/4660275?v=4", "profile": "https://sobolevn.me", "contributions": [ "doc" ] }, { "login": "y-mehta", "name": "Yash Mehta", "avatar_url": "https://avatars1.githubusercontent.com/u/24428063?v=4", "profile": "https://github.com/y-mehta", "contributions": [ "doc" ] }, { "login": "stefanzweifel", "name": "Stefan Zweifel", "avatar_url": "https://avatars3.githubusercontent.com/u/1080923?v=4", "profile": "https://stefanzweifel.io", "contributions": [ "doc" ] }, { "login": "ravgeetdhillon", "name": "Ravgeet Dhillon", "avatar_url": "https://avatars0.githubusercontent.com/u/27858510?v=4", "profile": "https://ravgeet.dev/", "contributions": [ "doc" ] }, { "login": "Andrew-Chen-Wang", "name": "Andrew Chen Wang", "avatar_url": "https://avatars0.githubusercontent.com/u/60190294?v=4", "profile": "https://github.com/Andrew-Chen-Wang", "contributions": [ "doc" ] }, { "login": "ruzickap", "name": "Petr Ruzicka", "avatar_url": "https://avatars2.githubusercontent.com/u/1434387?v=4", "profile": "https://petr.ruzicka.dev/", "contributions": [ "doc" ] } ], "contributorsPerLine": 7, "commitConvention": "none" } ================================================ FILE: .gitignore ================================================ # Logs logs *.log npm-debug.log* yarn-debug.log* yarn-error.log* ./functions # Runtime data pids *.pid *.seed *.pid.lock # Directory for instrumented libs generated by jscoverage/JSCover lib-cov # Coverage directory used by tools like istanbul coverage # nyc test coverage .nyc_output # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) .grunt # Bower dependency directory (https://bower.io/) bower_components # node-waf configuration .lock-wscript # Compiled binary addons (http://nodejs.org/api/addons.html) build/Release # Dependency directories node_modules/ jspm_packages/ # Typescript v1 declaration files typings/ # Optional npm cache directory .npm # Optional eslint cache .eslintcache # Optional REPL history .node_repl_history # Output of 'npm pack' *.tgz # dotenv environment variables file .env # gatsby files .cache/ public # Mac files .DS_Store # Yarn yarn-error.log .pnp/ .pnp.js # Yarn Integrity file .yarn-integrity ================================================ FILE: .nvmrc ================================================ v10.16.3 ================================================ FILE: .prettierrc ================================================ { "semi": false, "singleQuote": true, "trailingComma": "es5" } ================================================ FILE: CONTRIBUTING.md ================================================ ## Contributing Hi there! We're thrilled that you'd like to contribute to this project. Your help is essential for keeping it great. ## Issues We'd love you to open issues, if they're relevant to this repository: feature requests, bug reports, questions about our processes, declarations of gratefulness, etc. are all welcome. In particular, if you have a large PR you want to send our way, it may make sense to open an issue to discuss it with the maintainers first. ## Submitting a pull request 1. [Fork][fork] and clone the repository 1. Create a new branch: `git checkout -b my-branch-name` 1. Make your changes 1. Push to your fork and [submit a pull request][pr] 1. Pat your self on the back and wait for your pull request to be reviewed and merged. ## Adding your configuration to github-actions You can add your action to the website by creating a [new file md in `/actions directory`](https://github.com/boyney123/github-actions/new/master?filename=src/actions/your-action.md) with a template. You have two options to generate a template: 1. Use wizard magic and use this url to generate your markdown : [https://github-actions.netlify.com/.netlify/functions/github?url={YOUR_GITHUB_URL}](https://github-actions.netlify.com/.netlify/functions/github?url={YOUR_GITHUB_URL}) 2. Copy the contents below. ```m --- path: '/new-action' title: 'My New Action' github_url: 'https://github.com/action-url' author: 'David Boyne' twitter: '@boyney123' tags: ['tagExample'] subtitle: 'My new action that does some super cool things.' --- # Action details Write up a description or just copy your README here ``` ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) David Boyne Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================

github-actions

goat

A open source app to help developers find GitHub Actions.

[https://github-actions.netlify.app/](https://github-actions.netlify.app/)

[![All Contributors](https://img.shields.io/badge/all_contributors-20-orange.svg?style=flat-square)](#contributors-) [![MIT License][license-badge]][license] [![PRs Welcome][prs-badge]][prs] [![Netlify Status](https://api.netlify.com/api/v1/badges/135bba3e-819f-41a7-86f7-bc93cfecd07d/deploy-status)](https://app.netlify.com/sites/github-actions/deploys) [![Join the community on Spectrum][spectrum-badge]][spectrum] ## Motivation [Github Actions](https://css-tricks.com/introducing-github-actions/) are currently in beta and I believe they are game changing. Here is a great podcast that inspired me to write this website: [GitHub Actions is the next big thing](https://changelog.com/podcast/331) I'm excited to see what people build and also discover new actions that are available. You can checkout [https://github.com/sdras/awesome-actions](https://github.com/sdras/awesome-actions) which has some great resource on it! I created to this application to help people search and share GitHub actions with each other and I wanted to further my knowledge with some tech [gatsbyjs](https://www.gatsbyjs.org/) & [netlify](https://www.netlify.com/). ## Contributors Thanks goes to these wonderful people ([emoji key](https://github.com/all-contributors/all-contributors#emoji-key)):

David Boyne

💻

Bruno Tavares

📖

Pascal

📖 💻

Owen Voke

📖

Maximilian Held

📖

Jacob Zweifel

📖

Mike Coutermarsh

📖

Johannes Nicolai

📖

Nicolas Coutin

💻

Mariam Maarouf

💻

Ludovic Fernandez

📖

Michael Wright

📖

Jeffrey Paul

📖

Christian Studer

📖

Andrew Starr-Bochicchio

📖

Stephen Rhodes

💻

Varun Sridharan

📖

Shivam Mathur

📖

Thomas Clark

📖

MarvinJWendt

📖

Benjamin O

📖

Sviatoslav Sydorenko

📖

Martin Simon

📖

Geoffrey.C

📖

Adam Dobrawy

📖

Niklas Merz

📖

Nikita Sobolev

📖

Yash Mehta

📖

Stefan Zweifel

📖

Ravgeet Dhillon

📖

Andrew Chen Wang

📖

Petr Ruzicka

📖
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! [spectrum-badge]: https://withspectrum.github.io/badge/badge.svg [spectrum]: https://spectrum.chat/github-actions [license-badge]: https://img.shields.io/badge/License-MIT-yellow.svg [license]: https://github.com/boyney123/github-actions/blob/master/LICENSE [prs-badge]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square [prs]: http://makeapullrequest.com ================================================ FILE: functions/github.js ================================================ !function(e,t){for(var a in t)e[a]=t[a]}(exports,function(e){var t={};function a(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,a),i.l=!0,i.exports}return a.m=e,a.c=t,a.d=function(e,t,r){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(a.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)a.d(r,i,function(t){return e[t]}.bind(null,i));return r},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a(a.s=92)}([function(e,t,a){var r=a(21),i=a(17).Stream,o=a(4),n=/^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/;function s(e){return e.charAt(0).toUpperCase()+e.slice(1)}function c(e,t,a,i,n){throw new r.AssertionError({message:o.format("%s (%s) is required",e,t),actual:void 0===n?typeof i:n(i),expected:t,operator:a||"===",stackStartFunction:c.caller})}function u(e){return Object.prototype.toString.call(e).slice(8,-1)}function p(){}var l={bool:{check:function(e){return"boolean"==typeof e}},func:{check:function(e){return"function"==typeof e}},string:{check:function(e){return"string"==typeof e}},object:{check:function(e){return"object"==typeof e&&null!==e}},number:{check:function(e){return"number"==typeof e&&!isNaN(e)}},finite:{check:function(e){return"number"==typeof e&&!isNaN(e)&&isFinite(e)}},buffer:{check:function(e){return Buffer.isBuffer(e)},operator:"Buffer.isBuffer"},array:{check:function(e){return Array.isArray(e)},operator:"Array.isArray"},stream:{check:function(e){return e instanceof i},operator:"instanceof",actual:u},date:{check:function(e){return e instanceof Date},operator:"instanceof",actual:u},regexp:{check:function(e){return e instanceof RegExp},operator:"instanceof",actual:u},uuid:{check:function(e){return"string"==typeof e&&n.test(e)},operator:"isUUID"}};e.exports=function e(t){var a,i=Object.keys(l);return a=process.env.NODE_NDEBUG?p:function(e,t){e||c(t,"true",e)},i.forEach(function(e){if(t)a[e]=p;else{var r=l[e];a[e]=function(t,a){r.check(t)||c(a,e,r.operator,t,r.actual)}}}),i.forEach(function(e){var r="optional"+s(e);if(t)a[r]=p;else{var i=l[e];a[r]=function(t,a){null!=t&&(i.check(t)||c(a,e,i.operator,t,i.actual))}}}),i.forEach(function(e){var r="arrayOf"+s(e);if(t)a[r]=p;else{var i=l[e],o="["+e+"]";a[r]=function(e,t){var a;for(Array.isArray(e)||c(t,o,i.operator,e,i.actual),a=0;a1,i=t.length>0&&!(1===t.length&&"constructor"===t[0]),o=b.test(e+"")&&r.names(e).length>0;if(a||i||o)return!0}return!1}catch(e){return!1}}function x(e){function t(){}t.prototype=e;var a=new t;function r(){return typeof a.foo}return r(),r(),e}var w=/^[a-z$_][a-z$_0-9]*$/i;function j(e){return w.test(e)}function _(e,t,a){for(var r=new Array(e),i=0;i10||U[0]>0),L.isNode&&L.toFastProperties(process);try{throw new Error}catch(e){L.lastLineError=e}e.exports=L},function(e,t,a){"use strict";var r,i=a(62),o=i.Buffer,n={};for(r in i)i.hasOwnProperty(r)&&"SlowBuffer"!==r&&"Buffer"!==r&&(n[r]=i[r]);var s=n.Buffer={};for(r in o)o.hasOwnProperty(r)&&"allocUnsafe"!==r&&"allocUnsafeSlow"!==r&&(s[r]=o[r]);if(n.Buffer.prototype=o.prototype,s.from&&s.from!==Uint8Array.from||(s.from=function(e,t,a){if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type '+typeof e);if(e&&void 0===e.length)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);return o(e,t,a)}),s.alloc||(s.alloc=function(e,t,a){if("number"!=typeof e)throw new TypeError('The "size" argument must be of type number. Received type '+typeof e);if(e<0||e>=2*(1<<30))throw new RangeError('The value "'+e+'" is invalid for option "size"');var r=o(e);return t&&0!==t.length?"string"==typeof a?r.fill(t,a):r.fill(t):r.fill(0),r}),!n.kStringMaxLength)try{n.kStringMaxLength=process.binding("buffer").kStringMaxLength}catch(e){}n.constants||(n.constants={MAX_LENGTH:n.kMaxLength},n.kStringMaxLength&&(n.constants.MAX_STRING_LENGTH=n.kStringMaxLength)),e.exports=n},function(e,t){e.exports=require("crypto")},function(e,t){e.exports=require("util")},function(e,t,a){e.exports=g;var r,i=a(0),o=a(8),n=a(3),s=a(22),c=a(10),u=a(41).DiffieHellman,p=a(9),l=a(6),m=a(7);try{r=a(63)}catch(e){}var h=p.InvalidAlgorithmError,d=p.KeyParseError,f={};function g(e){i.object(e,"options"),i.arrayOfObject(e.parts,"options.parts"),i.string(e.type,"options.type"),i.optionalString(e.comment,"options.comment");var t=o.info[e.type];if("object"!=typeof t)throw new h(e.type);for(var a,r={},n=0;n1024&&(e="sha256"),"ed25519"===this.type&&(e="sha512"),"ecdsa"===this.type&&(e=this.size<=256?"sha256":this.size<=384?"sha384":"sha512"),e},g.prototype.createVerify=function(e){if(void 0===e&&(e=this.defaultHashAlgorithm()),i.string(e,"hash algorithm"),"ed25519"===this.type&&void 0!==r)return new r.Verifier(this,e);if("curve25519"===this.type)throw new Error("Curve25519 keys are not suitable for signing or verification");var t,a,o;try{a=e.toUpperCase(),t=n.createVerify(a)}catch(e){o=e}(void 0===t||o instanceof Error&&o.message.match(/Unknown message digest/))&&(a="RSA-",a+=e.toUpperCase(),t=n.createVerify(a)),i.ok(t,"failed to create verifier");var s=t.verify.bind(t),u=this.toBuffer("pkcs8"),p=this.curve,l=this;return t.verify=function(t,a){if(c.isSignature(t,[2,0]))return t.type===l.type&&((!t.hashAlgorithm||t.hashAlgorithm===e)&&((!t.curve||"ecdsa"!==l.type||t.curve===p)&&s(u,t.toBuffer("asn1"))));if("string"==typeof t||Buffer.isBuffer(t))return s(u,t,a);throw c.isSignature(t,[1,0])?new Error("signature was created by too old a version of sshpk and cannot be verified"):new TypeError("signature must be a string, Buffer, or Signature object")},t},g.prototype.createDiffieHellman=function(){if("rsa"===this.type)throw new Error("RSA keys do not support Diffie-Hellman");return new u(this)},g.prototype.createDH=g.prototype.createDiffieHellman,g.parse=function(e,t,a){"string"!=typeof e&&i.buffer(e,"data"),void 0===t&&(t="auto"),i.string(t,"format"),"string"==typeof a&&(a={filename:a}),i.optionalObject(a,"options"),void 0===a&&(a={}),i.optionalString(a.filename,"options.filename"),void 0===a.filename&&(a.filename="(unnamed)"),i.object(f[t],"formats[format]");try{var r=f[t].read(e,a);return r instanceof m&&(r=r.toPublic()),r.comment||(r.comment=a.filename),r}catch(e){if("KeyEncryptedError"===e.name)throw e;throw new d(a.filename,t,e)}},g.isKey=function(e,t){return l.isCompatible(e,g,t)},g.prototype._sshpkApiVersion=[1,7],g._oldVersionDetect=function(e){return i.func(e.toBuffer),i.func(e.fingerprint),e.createDH?[1,4]:e.defaultHashAlgorithm?[1,3]:e.formats.auto?[1,2]:e.formats.pkcs1?[1,1]:[1,0]}},function(e,t,a){e.exports={bufferSplit:function(e,t){r.buffer(e),r.string(t);for(var a=[],i=0,o=0,n=0;n=t.length){var s=n+1;a.push(e.slice(i,s-o)),i=s,o=0}i<=e.length&&a.push(e.slice(i,e.length));return a},addRSAMissing:function(e){r.object(e),d(e,o,[1,1]);var t,a=new l(e.part.d.data);if(!e.part.dmodp){var i=new l(e.part.p.data),n=a.mod(i.subtract(1));t=y(n),e.part.dmodp={name:"dmodp",data:t},e.parts.push(e.part.dmodp)}if(!e.part.dmodq){var s=new l(e.part.q.data),c=a.mod(s.subtract(1));t=y(c),e.part.dmodq={name:"dmodq",data:t},e.parts.push(e.part.dmodq)}},calculateDSAPublic:function(e,t,a){return r.buffer(e),r.buffer(t),r.buffer(a),e=new l(e),t=new l(t),a=new l(a),y(e.modPow(a,t))},calculateED25519Public:function(e){r.buffer(e);var t=m.sign.keyPair.fromSeed(new Uint8Array(e));return i.from(t.publicKey)},calculateX25519Public:function(e){r.buffer(e);var t=m.box.keyPair.fromSeed(new Uint8Array(e));return i.from(t.publicKey)},mpNormalize:v,mpDenormalize:function(e){r.buffer(e);for(;e.length>1&&0===e[0];)e=e.slice(1);return e},ecNormalize:function(e,t){if(r.buffer(e),0===e[0]&&4===e[1])return t?e:e.slice(1);if(4===e[0]){if(!t)return e}else{for(;0===e[0];)e=e.slice(1);if(2===e[0]||3===e[0])throw new Error("Compressed elliptic curve points are not supported");if(4!==e[0])throw new Error("Not a valid elliptic curve point");if(!t)return e}var a=i.alloc(e.length+1);return a[0]=0,e.copy(a,1),a},countZeros:function(e){var t=0,a=8;for(;th)return!1;if(r.constructor.name!==t.name)return!1;var o=r._sshpkApiVersion;void 0===o&&(o=t._oldVersionDetect(e));return!(o[0]!=a[0]||o[1]t;)r.equal(e[0],0),e=e.slice(1);for(;e.length=a[1],i+" must be compatible with "+t.name+" klass version "+a[0]+"."+a[1])}}var f={"des-ede3-cbc":{key:24,iv:8},"aes-128-cbc":{key:16,iv:16},"aes-256-cbc":{key:32,iv:16}},g=8;function v(e){for(r.buffer(e);e.length>1&&0===e[0]&&0==(128&e[1]);)e=e.slice(1);if(128==(128&e[0])){var t=i.alloc(e.length+1);t[0]=0,e.copy(t,1),e=t}return e}function y(e){var t=i.from(e.toByteArray());return t=v(t)}},function(e,t,a){e.exports=b;var r=a(0),i=a(2).Buffer,o=a(8),n=a(3),s=(a(22),a(10)),c=a(9),u=a(4),p=a(6),l=a(41),m=l.generateECDSA,h=l.generateED25519,d=a(63),f=a(24),g=a(5),v=(c.InvalidAlgorithmError,c.KeyParseError),y=(c.KeyEncryptedError,{});function b(e){r.object(e,"options"),g.call(this,e),this._pubCache=void 0}y.auto=a(64),y.pem=a(14),y.pkcs1=a(42),y.pkcs8=a(26),y.rfc4253=a(15),y["ssh-private"]=a(32),y.openssh=y["ssh-private"],y.ssh=y["ssh-private"],y.dnssec=a(43),u.inherits(b,g),b.formats=y,b.prototype.toBuffer=function(e,t){return void 0===e&&(e="pkcs1"),r.string(e,"format"),r.object(y[e],"formats[format]"),r.optionalObject(t,"options"),y[e].write(this,t)},b.prototype.hash=function(e,t){return this.toPublic().hash(e,t)},b.prototype.fingerprint=function(e,t){return this.toPublic().fingerprint(e,t)},b.prototype.toPublic=function(){if(this._pubCache)return this._pubCache;for(var e=o.info[this.type],t=[],a=0;a20&&0===o[0]&&(o=o.slice(1)),(u=this.part.s.data).length>20&&0===u[0]&&(u=u.slice(1)),this.hashAlgorithm&&"sha1"!==this.hashAlgorithm||o.length+u.length!==40)throw new Error("OpenSSH only supports DSA signatures with SHA1 hash");return t.writeBuffer(i.concat([o,u])),t.toBuffer()}if("ssh"===e&&"ecdsa"===this.type){var l,m=new c({});o=this.part.r.data,m.writeBuffer(o),m.writePart(this.part.s),t=new c({}),0===o[0]&&(o=o.slice(1));var h=8*o.length;return 256===h?l="nistp256":384===h?l="nistp384":528===h&&(l="nistp521"),t.writeString("ecdsa-sha2-"+l),t.writeBuffer(m.toBuffer()),t.toBuffer()}throw new Error("Invalid signature format");default:throw new Error("Invalid signature data")}},l.prototype.toString=function(e){return r.optionalString(e,"format"),this.toBuffer(e).toString("base64")},l.parse=function(e,t,a){"string"==typeof e&&(e=i.from(e,"base64")),r.buffer(e,"data"),r.string(a,"format"),r.string(t,"type");var o={};o.type=t.toLowerCase(),o.parts=[];try{switch(r.ok(e.length>0,"signature must not be empty"),o.type){case"rsa":case"ed25519":return m(e,t,a,o);case"dsa":case"ecdsa":return"asn1"===a?function(e,t,a,r){var i=new s.BerReader(e);i.readSequence();var o=i.readString(s.Ber.Integer,!0),c=i.readString(s.Ber.Integer,!0);return r.parts.push({name:"r",data:n.mpNormalize(o)}),r.parts.push({name:"s",data:n.mpNormalize(c)}),new l(r)}(e,0,0,o):"dsa"===o.type?function(e,t,a,i){if(40!=e.length){var o=new c({buffer:e}),n=o.readBuffer();"ssh-dss"===n.toString("ascii")&&(n=o.readBuffer()),r.ok(o.atEnd(),"extra trailing bytes"),r.strictEqual(n.length,40,"invalid inner length"),e=n}return i.parts.push({name:"r",data:e.slice(0,20)}),i.parts.push({name:"s",data:e.slice(20,40)}),new l(i)}(e,0,0,o):function(e,t,a,i){var o,n,s=new c({buffer:e}),u=s.readBuffer(),p=u.toString("ascii");if("ecdsa-"===p.slice(0,6)){var m=p.split("-");switch(r.strictEqual(m[0],"ecdsa"),r.strictEqual(m[1],"sha2"),i.curve=m[2],i.curve){case"nistp256":i.hashAlgo="sha256";break;case"nistp384":i.hashAlgo="sha384";break;case"nistp521":i.hashAlgo="sha512";break;default:throw new Error("Unsupported ECDSA curve: "+i.curve)}u=s.readBuffer(),r.ok(s.atEnd(),"extra trailing bytes on outer"),s=new c({buffer:u}),o=s.readPart()}else o={data:u};return n=s.readPart(),r.ok(s.atEnd(),"extra trailing bytes"),o.name="r",n.name="s",i.parts.push(o),i.parts.push(n),new l(i)}(e,0,0,o);default:throw new u(t)}}catch(e){if(e instanceof u)throw e;throw new p(t,a,e)}},l.isSignature=function(e,t){return n.isCompatible(e,l,t)},l.prototype._sshpkApiVersion=[2,1],l._oldVersionDetect=function(e){return r.func(e.toBuffer),e.hasOwnProperty("hashAlgorithm")?[2,0]:[1,0]}},function(e,t,a){var r=a(150);e.exports={Ber:r,BerReader:r.Reader,BerWriter:r.Writer}},function(e,t,a){"use strict";var r,i,o=a(16),n=o.freeze,s=a(1),c=s.inherits,u=s.notEnumerableProp;function p(e,t){function a(r){if(!(this instanceof a))return new a(r);u(this,"message","string"==typeof r?r:t),u(this,"name",e),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):Error.call(this)}return c(a,Error),a}var l=p("Warning","warning"),m=p("CancellationError","cancellation error"),h=p("TimeoutError","timeout error"),d=p("AggregateError","aggregate error");try{r=TypeError,i=RangeError}catch(e){r=p("TypeError","type error"),i=p("RangeError","range error")}for(var f="join pop push shift unshift slice filter forEach some every map indexOf lastIndexOf reduce reduceRight sort reverse".split(" "),g=0;g0;)y=k[--w].match(/[-]+[ ]*END ([A-Z0-9][A-Za-z0-9]+ )?(PUBLIC|PRIVATE) KEY[ ]*[-]+/);r.ok(y,"invalid PEM footer"),r.equal(u[2],y[2]);var j,_=u[2].toLowerCase();u[1]&&(r.equal(u[1],y[1],"PEM header and footer mismatch"),j=u[1].trim());k=k.slice(x,w+1);var S,E,F,P={};for(;k=k.slice(1),u=k[0].match(/^([A-Za-z0-9-]+): (.+)$/);)P[u[1].toLowerCase()]=u[2];if(k=k.slice(0,-1).join(""),e=n.from(k,"base64"),P["proc-type"]){var z=P["proc-type"].split(",");if("4"===z[0]&&"ENCRYPTED"===z[1]){if("string"==typeof t.passphrase&&(t.passphrase=n.from(t.passphrase,"utf-8")),!n.isBuffer(t.passphrase))throw new d.KeyEncryptedError(t.filename,"PEM");z=P["dek-info"].split(","),r.ok(2===z.length),S=z[0].toLowerCase(),F=n.from(z[1],"hex"),E=s.opensslKeyDeriv(S,F,t.passphrase,1).key}}if(j&&"encrypted"===j.toLowerCase()){var C,A=new i.BerReader(e);A.readSequence(),A.readSequence(),C=A.offset+A.length;var O=A.readOID();if(O!==f)throw new Error("Unsupported PEM/PKCS8 encryption scheme: "+O);A.readSequence(),A.readSequence();var q=A.offset+A.length,T=A.readOID();if(T!==g)throw new Error("Unsupported PBES2 KDF: "+T);A.readSequence();var B=A.readString(i.Ber.OctetString,!0),D=A.readInt(),I="sha1";if(A.offseth.length&&(y=h.length),g+=f.write(h.slice(v,y),g),f[g++]=10,v=y}return g+=f.write("-----END "+o+"-----\n",g),f.slice(0,g)}};var r=a(0),i=a(11),o=a(3),n=a(2).Buffer,s=(a(8),a(6)),c=a(5),u=a(7),p=a(42),l=a(26),m=a(32),h=a(15),d=a(9),f="1.2.840.113549.1.5.13",g="1.2.840.113549.1.5.12",v={"1.2.840.113549.3.7":"3des-cbc","2.16.840.1.101.3.4.1.2":"aes128-cbc","2.16.840.1.101.3.4.1.42":"aes256-cbc"},y={};Object.keys(v).forEach(function(e){y[v[e]]=e});var b={"1.2.840.113549.2.7":"sha1","1.2.840.113549.2.9":"sha256","1.2.840.113549.2.11":"sha512"},k={};Object.keys(b).forEach(function(e){k[b[e]]=e})},function(e,t,a){e.exports={read:m.bind(void 0,!1,void 0),readType:m.bind(void 0,!1),write:function(e,t){r.object(e);var a,s=l(e),p=o.info[e.type];c.isPrivateKey(e)&&(p=o.privInfo[e.type]);var m=p.parts,h=new u({});for(h.writeString(s),a=0;a=1,"key must have at least one part"),r.ok(e||d.atEnd(),"leftover bytes at end of key");var v=s,y=o.info[m.type];if("private"!==t&&y.parts.length===h.length||(y=o.privInfo[m.type],v=c),r.strictEqual(y.parts.length,h.length),"ecdsa"===m.type){var b=/^ecdsa-sha2-(.+)$/.exec(f);r.ok(null!==b),r.strictEqual(b[1],h[0].data.toString())}for(var k=!0,x=0;x=t)throw new Error("Cannot access property/index "+r+" levels up, current level is "+t);return a[t-r]}if(r>t)throw new Error("Cannot access data "+r+" levels up, current level is "+t);if(o="data"+(t-r||""),!i)return o}for(var s=o,u=i.split("/"),p=0;p2){if(a="md5","md5"===u[0].toLowerCase()&&(u=u.slice(1)),u=(u=u.map(function(t){for(;t.length<2;)t="0"+t;if(t.length>2)throw new m(e);return t})).join(""),!g.test(u)||u.length%2!=0)throw new m(e);try{n=i.from(u,"hex")}catch(t){throw new m(e)}}else{if(g.test(e))n=i.from(e,"hex");else{if(!f.test(e))throw new m(e);n=i.from(e,"base64")}switch(n.length){case 32:a="sha256";break;case 16:a="md5";break;case 20:a="sha1";break;case 64:a="sha512";break;default:throw new m(e)}void 0===t.hashType&&(c="spki")}if(void 0===a)throw new m(e);if(void 0===o.hashAlgs[a])throw new h(a);if(void 0!==s&&-1===(s=s.map(function(e){return e.toLowerCase()})).indexOf(a))throw new h(a);return new d({algorithm:a,hash:n,type:t.type||"key",hashType:c})},d.isFingerprint=function(e,t){return l.isCompatible(e,d,t)},d.prototype._sshpkApiVersion=[1,2],d._oldVersionDetect=function(e){return r.func(e.toString),r.func(e.matches),[1,0]}},function(e,t,a){(function(){var t;function a(e,t,a){null!=e&&("number"==typeof e?this.fromNumber(e,t,a):null==t&&"string"!=typeof e?this.fromString(e,256):this.fromString(e,t))}function r(){return new a(null)}var i="undefined"!=typeof navigator;i&&"Microsoft Internet Explorer"==navigator.appName?(a.prototype.am=function(e,t,a,r,i,o){for(var n=32767&t,s=t>>15;--o>=0;){var c=32767&this[e],u=this[e++]>>15,p=s*c+u*n;i=((c=n*c+((32767&p)<<15)+a[r]+(1073741823&i))>>>30)+(p>>>15)+s*u+(i>>>30),a[r++]=1073741823&c}return i},t=30):i&&"Netscape"!=navigator.appName?(a.prototype.am=function(e,t,a,r,i,o){for(;--o>=0;){var n=t*this[e++]+a[r]+i;i=Math.floor(n/67108864),a[r++]=67108863&n}return i},t=26):(a.prototype.am=function(e,t,a,r,i,o){for(var n=16383&t,s=t>>14;--o>=0;){var c=16383&this[e],u=this[e++]>>14,p=s*c+u*n;i=((c=n*c+((16383&p)<<14)+a[r]+i)>>28)+(p>>14)+s*u,a[r++]=268435455&c}return i},t=28),a.prototype.DB=t,a.prototype.DM=(1<>>16)&&(e=t,a+=16),0!=(t=e>>8)&&(e=t,a+=8),0!=(t=e>>4)&&(e=t,a+=4),0!=(t=e>>2)&&(e=t,a+=2),0!=(t=e>>1)&&(e=t,a+=1),a}function h(e){this.m=e}function d(e){this.m=e,this.mp=e.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<>=16,t+=16),0==(255&e)&&(e>>=8,t+=8),0==(15&e)&&(e>>=4,t+=4),0==(3&e)&&(e>>=2,t+=2),0==(1&e)&&++t,t}function k(e){for(var t=0;0!=e;)e&=e-1,++t;return t}function x(){}function w(e){return e}function j(e){this.r2=r(),this.q3=r(),a.ONE.dlShiftTo(2*e.t,this.r2),this.mu=this.r2.divide(e),this.m=e}h.prototype.convert=function(e){return e.s<0||e.compareTo(this.m)>=0?e.mod(this.m):e},h.prototype.revert=function(e){return e},h.prototype.reduce=function(e){e.divRemTo(this.m,null,e)},h.prototype.mulTo=function(e,t,a){e.multiplyTo(t,a),this.reduce(a)},h.prototype.sqrTo=function(e,t){e.squareTo(t),this.reduce(t)},d.prototype.convert=function(e){var t=r();return e.abs().dlShiftTo(this.m.t,t),t.divRemTo(this.m,null,t),e.s<0&&t.compareTo(a.ZERO)>0&&this.m.subTo(t,t),t},d.prototype.revert=function(e){var t=r();return e.copyTo(t),this.reduce(t),t},d.prototype.reduce=function(e){for(;e.t<=this.mt2;)e[e.t++]=0;for(var t=0;t>15)*this.mpl&this.um)<<15)&e.DM;for(e[a=t+this.m.t]+=this.m.am(0,r,e,t,0,this.m.t);e[a]>=e.DV;)e[a]-=e.DV,e[++a]++}e.clamp(),e.drShiftTo(this.m.t,e),e.compareTo(this.m)>=0&&e.subTo(this.m,e)},d.prototype.mulTo=function(e,t,a){e.multiplyTo(t,a),this.reduce(a)},d.prototype.sqrTo=function(e,t){e.squareTo(t),this.reduce(t)},a.prototype.copyTo=function(e){for(var t=this.t-1;t>=0;--t)e[t]=this[t];e.t=this.t,e.s=this.s},a.prototype.fromInt=function(e){this.t=1,this.s=e<0?-1:0,e>0?this[0]=e:e<-1?this[0]=e+this.DV:this.t=0},a.prototype.fromString=function(e,t){var r;if(16==t)r=4;else if(8==t)r=3;else if(256==t)r=8;else if(2==t)r=1;else if(32==t)r=5;else{if(4!=t)return void this.fromRadix(e,t);r=2}this.t=0,this.s=0;for(var i=e.length,o=!1,n=0;--i>=0;){var s=8==r?255&e[i]:p(e,i);s<0?"-"==e.charAt(i)&&(o=!0):(o=!1,0==n?this[this.t++]=s:n+r>this.DB?(this[this.t-1]|=(s&(1<>this.DB-n):this[this.t-1]|=s<=this.DB&&(n-=this.DB))}8==r&&0!=(128&e[0])&&(this.s=-1,n>0&&(this[this.t-1]|=(1<0&&this[this.t-1]==e;)--this.t},a.prototype.dlShiftTo=function(e,t){var a;for(a=this.t-1;a>=0;--a)t[a+e]=this[a];for(a=e-1;a>=0;--a)t[a]=0;t.t=this.t+e,t.s=this.s},a.prototype.drShiftTo=function(e,t){for(var a=e;a=0;--a)t[a+n+1]=this[a]>>i|s,s=(this[a]&o)<=0;--a)t[a]=0;t[n]=s,t.t=this.t+n+1,t.s=this.s,t.clamp()},a.prototype.rShiftTo=function(e,t){t.s=this.s;var a=Math.floor(e/this.DB);if(a>=this.t)t.t=0;else{var r=e%this.DB,i=this.DB-r,o=(1<>r;for(var n=a+1;n>r;r>0&&(t[this.t-a-1]|=(this.s&o)<>=this.DB;if(e.t>=this.DB;r+=this.s}else{for(r+=this.s;a>=this.DB;r-=e.s}t.s=r<0?-1:0,r<-1?t[a++]=this.DV+r:r>0&&(t[a++]=r),t.t=a,t.clamp()},a.prototype.multiplyTo=function(e,t){var r=this.abs(),i=e.abs(),o=r.t;for(t.t=o+i.t;--o>=0;)t[o]=0;for(o=0;o=0;)e[a]=0;for(a=0;a=t.DV&&(e[a+t.t]-=t.DV,e[a+t.t+1]=1)}e.t>0&&(e[e.t-1]+=t.am(a,t[a],e,2*a,0,1)),e.s=0,e.clamp()},a.prototype.divRemTo=function(e,t,i){var o=e.abs();if(!(o.t<=0)){var n=this.abs();if(n.t0?(o.lShiftTo(p,s),n.lShiftTo(p,i)):(o.copyTo(s),n.copyTo(i));var l=s.t,h=s[l-1];if(0!=h){var d=h*(1<1?s[l-2]>>this.F2:0),f=this.FV/d,g=(1<=0&&(i[i.t++]=1,i.subTo(k,i)),a.ONE.dlShiftTo(l,k),k.subTo(s,s);s.t=0;){var x=i[--y]==h?this.DM:Math.floor(i[y]*f+(i[y-1]+v)*g);if((i[y]+=s.am(0,x,i,b,0,l))0&&i.rShiftTo(p,i),c<0&&a.ZERO.subTo(i,i)}}},a.prototype.invDigit=function(){if(this.t<1)return 0;var e=this[0];if(0==(1&e))return 0;var t=3&e;return(t=(t=(t=(t=t*(2-(15&e)*t)&15)*(2-(255&e)*t)&255)*(2-((65535&e)*t&65535))&65535)*(2-e*t%this.DV)%this.DV)>0?this.DV-t:-t},a.prototype.isEven=function(){return 0==(this.t>0?1&this[0]:this.s)},a.prototype.exp=function(e,t){if(e>4294967295||e<1)return a.ONE;var i=r(),o=r(),n=t.convert(this),s=m(e)-1;for(n.copyTo(i);--s>=0;)if(t.sqrTo(i,o),(e&1<0)t.mulTo(o,n,i);else{var c=i;i=o,o=c}return t.revert(i)},a.prototype.toString=function(e){if(this.s<0)return"-"+this.negate().toString(e);var t;if(16==e)t=4;else if(8==e)t=3;else if(2==e)t=1;else if(32==e)t=5;else{if(4!=e)return this.toRadix(e);t=2}var a,r=(1<0)for(s>s)>0&&(i=!0,o=u(a));n>=0;)s>(s+=this.DB-t)):(a=this[n]>>(s-=t)&r,s<=0&&(s+=this.DB,--n)),a>0&&(i=!0),i&&(o+=u(a));return i?o:"0"},a.prototype.negate=function(){var e=r();return a.ZERO.subTo(this,e),e},a.prototype.abs=function(){return this.s<0?this.negate():this},a.prototype.compareTo=function(e){var t=this.s-e.s;if(0!=t)return t;var a=this.t;if(0!=(t=a-e.t))return this.s<0?-t:t;for(;--a>=0;)if(0!=(t=this[a]-e[a]))return t;return 0},a.prototype.bitLength=function(){return this.t<=0?0:this.DB*(this.t-1)+m(this[this.t-1]^this.s&this.DM)},a.prototype.mod=function(e){var t=r();return this.abs().divRemTo(e,null,t),this.s<0&&t.compareTo(a.ZERO)>0&&e.subTo(t,t),t},a.prototype.modPowInt=function(e,t){var a;return a=e<256||t.isEven()?new h(t):new d(t),this.exp(e,a)},a.ZERO=l(0),a.ONE=l(1),x.prototype.convert=w,x.prototype.revert=w,x.prototype.mulTo=function(e,t,a){e.multiplyTo(t,a)},x.prototype.sqrTo=function(e,t){e.squareTo(t)},j.prototype.convert=function(e){if(e.s<0||e.t>2*this.m.t)return e.mod(this.m);if(e.compareTo(this.m)<0)return e;var t=r();return e.copyTo(t),this.reduce(t),t},j.prototype.revert=function(e){return e},j.prototype.reduce=function(e){for(e.drShiftTo(this.m.t-1,this.r2),e.t>this.m.t+1&&(e.t=this.m.t+1,e.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);e.compareTo(this.r2)<0;)e.dAddOffset(1,this.m.t+1);for(e.subTo(this.r2,e);e.compareTo(this.m)>=0;)e.subTo(this.m,e)},j.prototype.mulTo=function(e,t,a){e.multiplyTo(t,a),this.reduce(a)},j.prototype.sqrTo=function(e,t){e.squareTo(t),this.reduce(t)};var _,S,E,F=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],P=(1<<26)/F[F.length-1];function z(){var e;e=(new Date).getTime(),S[E++]^=255&e,S[E++]^=e>>8&255,S[E++]^=e>>16&255,S[E++]^=e>>24&255,E>=D&&(E-=D)}if(a.prototype.chunkSize=function(e){return Math.floor(Math.LN2*this.DB/Math.log(e))},a.prototype.toRadix=function(e){if(null==e&&(e=10),0==this.signum()||e<2||e>36)return"0";var t=this.chunkSize(e),a=Math.pow(e,t),i=l(a),o=r(),n=r(),s="";for(this.divRemTo(i,o,n);o.signum()>0;)s=(a+n.intValue()).toString(e).substr(1)+s,o.divRemTo(i,o,n);return n.intValue().toString(e)+s},a.prototype.fromRadix=function(e,t){this.fromInt(0),null==t&&(t=10);for(var r=this.chunkSize(t),i=Math.pow(t,r),o=!1,n=0,s=0,c=0;c=r&&(this.dMultiply(i),this.dAddOffset(s,0),n=0,s=0))}n>0&&(this.dMultiply(Math.pow(t,n)),this.dAddOffset(s,0)),o&&a.ZERO.subTo(this,this)},a.prototype.fromNumber=function(e,t,r){if("number"==typeof t)if(e<2)this.fromInt(1);else for(this.fromNumber(e,r),this.testBit(e-1)||this.bitwiseTo(a.ONE.shiftLeft(e-1),g,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(t);)this.dAddOffset(2,0),this.bitLength()>e&&this.subTo(a.ONE.shiftLeft(e-1),this);else{var i=new Array,o=7&e;i.length=1+(e>>3),t.nextBytes(i),o>0?i[0]&=(1<>=this.DB;if(e.t>=this.DB;r+=this.s}else{for(r+=this.s;a>=this.DB;r+=e.s}t.s=r<0?-1:0,r>0?t[a++]=r:r<-1&&(t[a++]=this.DV+r),t.t=a,t.clamp()},a.prototype.dMultiply=function(e){this[this.t]=this.am(0,e-1,this,0,0,this.t),++this.t,this.clamp()},a.prototype.dAddOffset=function(e,t){if(0!=e){for(;this.t<=t;)this[this.t++]=0;for(this[t]+=e;this[t]>=this.DV;)this[t]-=this.DV,++t>=this.t&&(this[this.t++]=0),++this[t]}},a.prototype.multiplyLowerTo=function(e,t,a){var r,i=Math.min(this.t+e.t,t);for(a.s=0,a.t=i;i>0;)a[--i]=0;for(r=a.t-this.t;i=0;)a[r]=0;for(r=Math.max(t-this.t,0);r0)if(0==t)a=this[0]%e;else for(var r=this.t-1;r>=0;--r)a=(t*a+this[r])%e;return a},a.prototype.millerRabin=function(e){var t=this.subtract(a.ONE),i=t.getLowestSetBit();if(i<=0)return!1;var o=t.shiftRight(i);(e=e+1>>1)>F.length&&(e=F.length);for(var n=r(),s=0;s>24},a.prototype.shortValue=function(){return 0==this.t?this.s:this[0]<<16>>16},a.prototype.signum=function(){return this.s<0?-1:this.t<=0||1==this.t&&this[0]<=0?0:1},a.prototype.toByteArray=function(){var e=this.t,t=new Array;t[0]=this.s;var a,r=this.DB-e*this.DB%8,i=0;if(e-- >0)for(r>r)!=(this.s&this.DM)>>r&&(t[i++]=a|this.s<=0;)r<8?(a=(this[e]&(1<>(r+=this.DB-8)):(a=this[e]>>(r-=8)&255,r<=0&&(r+=this.DB,--e)),0!=(128&a)&&(a|=-256),0==i&&(128&this.s)!=(128&a)&&++i,(i>0||a!=this.s)&&(t[i++]=a);return t},a.prototype.equals=function(e){return 0==this.compareTo(e)},a.prototype.min=function(e){return this.compareTo(e)<0?this:e},a.prototype.max=function(e){return this.compareTo(e)>0?this:e},a.prototype.and=function(e){var t=r();return this.bitwiseTo(e,f,t),t},a.prototype.or=function(e){var t=r();return this.bitwiseTo(e,g,t),t},a.prototype.xor=function(e){var t=r();return this.bitwiseTo(e,v,t),t},a.prototype.andNot=function(e){var t=r();return this.bitwiseTo(e,y,t),t},a.prototype.not=function(){for(var e=r(),t=0;t=this.t?0!=this.s:0!=(this[t]&1<1){var f=r();for(i.sqrTo(s[1],f);c<=p;)s[c]=r(),i.mulTo(f,s[c-2],s[c]),c+=2}var g,v,y=e.t-1,b=!0,k=r();for(o=m(e[y])-1;y>=0;){for(o>=u?g=e[y]>>o-u&p:(g=(e[y]&(1<0&&(g|=e[y-1]>>this.DB+o-u)),c=a;0==(1&g);)g>>=1,--c;if((o-=c)<0&&(o+=this.DB,--y),b)s[g].copyTo(n),b=!1;else{for(;c>1;)i.sqrTo(n,k),i.sqrTo(k,n),c-=2;c>0?i.sqrTo(n,k):(v=n,n=k,k=v),i.mulTo(k,s[g],n)}for(;y>=0&&0==(e[y]&1<=0?(r.subTo(i,r),t&&o.subTo(s,o),n.subTo(c,n)):(i.subTo(r,i),t&&s.subTo(o,s),c.subTo(n,c))}return 0!=i.compareTo(a.ONE)?a.ZERO:c.compareTo(e)>=0?c.subtract(e):c.signum()<0?(c.addTo(e,c),c.signum()<0?c.add(e):c):c},a.prototype.pow=function(e){return this.exp(e,new x)},a.prototype.gcd=function(e){var t=this.s<0?this.negate():this.clone(),a=e.s<0?e.negate():e.clone();if(t.compareTo(a)<0){var r=t;t=a,a=r}var i=t.getLowestSetBit(),o=a.getLowestSetBit();if(o<0)return t;for(i0&&(t.rShiftTo(o,t),a.rShiftTo(o,a));t.signum()>0;)(i=t.getLowestSetBit())>0&&t.rShiftTo(i,t),(i=a.getLowestSetBit())>0&&a.rShiftTo(i,a),t.compareTo(a)>=0?(t.subTo(a,t),t.rShiftTo(1,t)):(a.subTo(t,a),a.rShiftTo(1,a));return o>0&&a.lShiftTo(o,a),a},a.prototype.isProbablePrime=function(e){var t,a=this.abs();if(1==a.t&&a[0]<=F[F.length-1]){for(t=0;t>>8,S[E++]=255&C;E=0,z()}function q(){if(null==_){for(z(),(_=new B).init(S),E=0;E>24&255,e[t+1]=a>>16&255,e[t+2]=a>>8&255,e[t+3]=255&a,e[t+4]=r>>24&255,e[t+5]=r>>16&255,e[t+6]=r>>8&255,e[t+7]=255&r}function f(e,t,a,r,i){var o,n=0;for(o=0;o>>8)-1}function g(e,t,a,r){return f(e,t,a,r,16)}function v(e,t,a,r){return f(e,t,a,r,32)}function y(e,t,a,r){!function(e,t,a,r){for(var i,o=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,n=255&a[0]|(255&a[1])<<8|(255&a[2])<<16|(255&a[3])<<24,s=255&a[4]|(255&a[5])<<8|(255&a[6])<<16|(255&a[7])<<24,c=255&a[8]|(255&a[9])<<8|(255&a[10])<<16|(255&a[11])<<24,u=255&a[12]|(255&a[13])<<8|(255&a[14])<<16|(255&a[15])<<24,p=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,l=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,m=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,h=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,d=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,f=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,g=255&a[16]|(255&a[17])<<8|(255&a[18])<<16|(255&a[19])<<24,v=255&a[20]|(255&a[21])<<8|(255&a[22])<<16|(255&a[23])<<24,y=255&a[24]|(255&a[25])<<8|(255&a[26])<<16|(255&a[27])<<24,b=255&a[28]|(255&a[29])<<8|(255&a[30])<<16|(255&a[31])<<24,k=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,x=o,w=n,j=s,_=c,S=u,E=p,F=l,P=m,z=h,C=d,A=f,O=g,q=v,T=y,B=b,D=k,I=0;I<20;I+=2)x^=(i=(q^=(i=(z^=(i=(S^=(i=x+q|0)<<7|i>>>25)+x|0)<<9|i>>>23)+S|0)<<13|i>>>19)+z|0)<<18|i>>>14,E^=(i=(w^=(i=(T^=(i=(C^=(i=E+w|0)<<7|i>>>25)+E|0)<<9|i>>>23)+C|0)<<13|i>>>19)+T|0)<<18|i>>>14,A^=(i=(F^=(i=(j^=(i=(B^=(i=A+F|0)<<7|i>>>25)+A|0)<<9|i>>>23)+B|0)<<13|i>>>19)+j|0)<<18|i>>>14,D^=(i=(O^=(i=(P^=(i=(_^=(i=D+O|0)<<7|i>>>25)+D|0)<<9|i>>>23)+_|0)<<13|i>>>19)+P|0)<<18|i>>>14,x^=(i=(_^=(i=(j^=(i=(w^=(i=x+_|0)<<7|i>>>25)+x|0)<<9|i>>>23)+w|0)<<13|i>>>19)+j|0)<<18|i>>>14,E^=(i=(S^=(i=(P^=(i=(F^=(i=E+S|0)<<7|i>>>25)+E|0)<<9|i>>>23)+F|0)<<13|i>>>19)+P|0)<<18|i>>>14,A^=(i=(C^=(i=(z^=(i=(O^=(i=A+C|0)<<7|i>>>25)+A|0)<<9|i>>>23)+O|0)<<13|i>>>19)+z|0)<<18|i>>>14,D^=(i=(B^=(i=(T^=(i=(q^=(i=D+B|0)<<7|i>>>25)+D|0)<<9|i>>>23)+q|0)<<13|i>>>19)+T|0)<<18|i>>>14;x=x+o|0,w=w+n|0,j=j+s|0,_=_+c|0,S=S+u|0,E=E+p|0,F=F+l|0,P=P+m|0,z=z+h|0,C=C+d|0,A=A+f|0,O=O+g|0,q=q+v|0,T=T+y|0,B=B+b|0,D=D+k|0,e[0]=x>>>0&255,e[1]=x>>>8&255,e[2]=x>>>16&255,e[3]=x>>>24&255,e[4]=w>>>0&255,e[5]=w>>>8&255,e[6]=w>>>16&255,e[7]=w>>>24&255,e[8]=j>>>0&255,e[9]=j>>>8&255,e[10]=j>>>16&255,e[11]=j>>>24&255,e[12]=_>>>0&255,e[13]=_>>>8&255,e[14]=_>>>16&255,e[15]=_>>>24&255,e[16]=S>>>0&255,e[17]=S>>>8&255,e[18]=S>>>16&255,e[19]=S>>>24&255,e[20]=E>>>0&255,e[21]=E>>>8&255,e[22]=E>>>16&255,e[23]=E>>>24&255,e[24]=F>>>0&255,e[25]=F>>>8&255,e[26]=F>>>16&255,e[27]=F>>>24&255,e[28]=P>>>0&255,e[29]=P>>>8&255,e[30]=P>>>16&255,e[31]=P>>>24&255,e[32]=z>>>0&255,e[33]=z>>>8&255,e[34]=z>>>16&255,e[35]=z>>>24&255,e[36]=C>>>0&255,e[37]=C>>>8&255,e[38]=C>>>16&255,e[39]=C>>>24&255,e[40]=A>>>0&255,e[41]=A>>>8&255,e[42]=A>>>16&255,e[43]=A>>>24&255,e[44]=O>>>0&255,e[45]=O>>>8&255,e[46]=O>>>16&255,e[47]=O>>>24&255,e[48]=q>>>0&255,e[49]=q>>>8&255,e[50]=q>>>16&255,e[51]=q>>>24&255,e[52]=T>>>0&255,e[53]=T>>>8&255,e[54]=T>>>16&255,e[55]=T>>>24&255,e[56]=B>>>0&255,e[57]=B>>>8&255,e[58]=B>>>16&255,e[59]=B>>>24&255,e[60]=D>>>0&255,e[61]=D>>>8&255,e[62]=D>>>16&255,e[63]=D>>>24&255}(e,t,a,r)}function b(e,t,a,r){!function(e,t,a,r){for(var i,o=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,n=255&a[0]|(255&a[1])<<8|(255&a[2])<<16|(255&a[3])<<24,s=255&a[4]|(255&a[5])<<8|(255&a[6])<<16|(255&a[7])<<24,c=255&a[8]|(255&a[9])<<8|(255&a[10])<<16|(255&a[11])<<24,u=255&a[12]|(255&a[13])<<8|(255&a[14])<<16|(255&a[15])<<24,p=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,l=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,m=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,h=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,d=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,f=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,g=255&a[16]|(255&a[17])<<8|(255&a[18])<<16|(255&a[19])<<24,v=255&a[20]|(255&a[21])<<8|(255&a[22])<<16|(255&a[23])<<24,y=255&a[24]|(255&a[25])<<8|(255&a[26])<<16|(255&a[27])<<24,b=255&a[28]|(255&a[29])<<8|(255&a[30])<<16|(255&a[31])<<24,k=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,x=0;x<20;x+=2)o^=(i=(v^=(i=(h^=(i=(u^=(i=o+v|0)<<7|i>>>25)+o|0)<<9|i>>>23)+u|0)<<13|i>>>19)+h|0)<<18|i>>>14,p^=(i=(n^=(i=(y^=(i=(d^=(i=p+n|0)<<7|i>>>25)+p|0)<<9|i>>>23)+d|0)<<13|i>>>19)+y|0)<<18|i>>>14,f^=(i=(l^=(i=(s^=(i=(b^=(i=f+l|0)<<7|i>>>25)+f|0)<<9|i>>>23)+b|0)<<13|i>>>19)+s|0)<<18|i>>>14,k^=(i=(g^=(i=(m^=(i=(c^=(i=k+g|0)<<7|i>>>25)+k|0)<<9|i>>>23)+c|0)<<13|i>>>19)+m|0)<<18|i>>>14,o^=(i=(c^=(i=(s^=(i=(n^=(i=o+c|0)<<7|i>>>25)+o|0)<<9|i>>>23)+n|0)<<13|i>>>19)+s|0)<<18|i>>>14,p^=(i=(u^=(i=(m^=(i=(l^=(i=p+u|0)<<7|i>>>25)+p|0)<<9|i>>>23)+l|0)<<13|i>>>19)+m|0)<<18|i>>>14,f^=(i=(d^=(i=(h^=(i=(g^=(i=f+d|0)<<7|i>>>25)+f|0)<<9|i>>>23)+g|0)<<13|i>>>19)+h|0)<<18|i>>>14,k^=(i=(b^=(i=(y^=(i=(v^=(i=k+b|0)<<7|i>>>25)+k|0)<<9|i>>>23)+v|0)<<13|i>>>19)+y|0)<<18|i>>>14;e[0]=o>>>0&255,e[1]=o>>>8&255,e[2]=o>>>16&255,e[3]=o>>>24&255,e[4]=p>>>0&255,e[5]=p>>>8&255,e[6]=p>>>16&255,e[7]=p>>>24&255,e[8]=f>>>0&255,e[9]=f>>>8&255,e[10]=f>>>16&255,e[11]=f>>>24&255,e[12]=k>>>0&255,e[13]=k>>>8&255,e[14]=k>>>16&255,e[15]=k>>>24&255,e[16]=l>>>0&255,e[17]=l>>>8&255,e[18]=l>>>16&255,e[19]=l>>>24&255,e[20]=m>>>0&255,e[21]=m>>>8&255,e[22]=m>>>16&255,e[23]=m>>>24&255,e[24]=h>>>0&255,e[25]=h>>>8&255,e[26]=h>>>16&255,e[27]=h>>>24&255,e[28]=d>>>0&255,e[29]=d>>>8&255,e[30]=d>>>16&255,e[31]=d>>>24&255}(e,t,a,r)}var k=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function x(e,t,a,r,i,o,n){var s,c,u=new Uint8Array(16),p=new Uint8Array(64);for(c=0;c<16;c++)u[c]=0;for(c=0;c<8;c++)u[c]=o[c];for(;i>=64;){for(y(p,u,n,k),c=0;c<64;c++)e[t+c]=a[r+c]^p[c];for(s=1,c=8;c<16;c++)s=s+(255&u[c])|0,u[c]=255&s,s>>>=8;i-=64,t+=64,r+=64}if(i>0)for(y(p,u,n,k),c=0;c=64;){for(y(c,s,i,k),n=0;n<64;n++)e[t+n]=c[n];for(o=1,n=8;n<16;n++)o=o+(255&s[n])|0,s[n]=255&o,o>>>=8;a-=64,t+=64}if(a>0)for(y(c,s,i,k),n=0;n>>13|a<<3),r=255&e[4]|(255&e[5])<<8,this.r[2]=7939&(a>>>10|r<<6),i=255&e[6]|(255&e[7])<<8,this.r[3]=8191&(r>>>7|i<<9),o=255&e[8]|(255&e[9])<<8,this.r[4]=255&(i>>>4|o<<12),this.r[5]=o>>>1&8190,n=255&e[10]|(255&e[11])<<8,this.r[6]=8191&(o>>>14|n<<2),s=255&e[12]|(255&e[13])<<8,this.r[7]=8065&(n>>>11|s<<5),c=255&e[14]|(255&e[15])<<8,this.r[8]=8191&(s>>>8|c<<8),this.r[9]=c>>>5&127,this.pad[0]=255&e[16]|(255&e[17])<<8,this.pad[1]=255&e[18]|(255&e[19])<<8,this.pad[2]=255&e[20]|(255&e[21])<<8,this.pad[3]=255&e[22]|(255&e[23])<<8,this.pad[4]=255&e[24]|(255&e[25])<<8,this.pad[5]=255&e[26]|(255&e[27])<<8,this.pad[6]=255&e[28]|(255&e[29])<<8,this.pad[7]=255&e[30]|(255&e[31])<<8};function E(e,t,a,r,i,o){var n=new S(o);return n.update(a,r,i),n.finish(e,t),0}function F(e,t,a,r,i,o){var n=new Uint8Array(16);return E(n,0,a,r,i,o),g(e,t,n,0)}function P(e,t,a,r,i){var o;if(a<32)return-1;for(_(e,0,t,0,a,r,i),E(e,16,e,32,a-32,e),o=0;o<16;o++)e[o]=0;return 0}function z(e,t,a,r,i){var o,n=new Uint8Array(32);if(a<32)return-1;if(j(n,0,32,r,i),0!==F(t,16,t,32,a-32,n))return-1;for(_(e,0,t,0,a,r,i),o=0;o<32;o++)e[o]=0;return 0}function C(e,t){var a;for(a=0;a<16;a++)e[a]=0|t[a]}function A(e){var t,a,r=1;for(t=0;t<16;t++)a=e[t]+r+65535,r=Math.floor(a/65536),e[t]=a-65536*r;e[0]+=r-1+37*(r-1)}function O(e,t,a){for(var r,i=~(a-1),o=0;o<16;o++)r=i&(e[o]^t[o]),e[o]^=r,t[o]^=r}function q(e,a){var r,i,o,n=t(),s=t();for(r=0;r<16;r++)s[r]=a[r];for(A(s),A(s),A(s),i=0;i<2;i++){for(n[0]=s[0]-65517,r=1;r<15;r++)n[r]=s[r]-65535-(n[r-1]>>16&1),n[r-1]&=65535;n[15]=s[15]-32767-(n[14]>>16&1),o=n[15]>>16&1,n[14]&=65535,O(s,n,1-o)}for(r=0;r<16;r++)e[2*r]=255&s[r],e[2*r+1]=s[r]>>8}function T(e,t){var a=new Uint8Array(32),r=new Uint8Array(32);return q(a,e),q(r,t),v(a,0,r,0)}function B(e){var t=new Uint8Array(32);return q(t,e),1&t[0]}function D(e,t){var a;for(a=0;a<16;a++)e[a]=t[2*a]+(t[2*a+1]<<8);e[15]&=32767}function I(e,t,a){for(var r=0;r<16;r++)e[r]=t[r]+a[r]}function R(e,t,a){for(var r=0;r<16;r++)e[r]=t[r]-a[r]}function N(e,t,a){var r,i,o=0,n=0,s=0,c=0,u=0,p=0,l=0,m=0,h=0,d=0,f=0,g=0,v=0,y=0,b=0,k=0,x=0,w=0,j=0,_=0,S=0,E=0,F=0,P=0,z=0,C=0,A=0,O=0,q=0,T=0,B=0,D=a[0],I=a[1],R=a[2],N=a[3],L=a[4],U=a[5],H=a[6],$=a[7],M=a[8],K=a[9],V=a[10],Q=a[11],G=a[12],W=a[13],Z=a[14],Y=a[15];o+=(r=t[0])*D,n+=r*I,s+=r*R,c+=r*N,u+=r*L,p+=r*U,l+=r*H,m+=r*$,h+=r*M,d+=r*K,f+=r*V,g+=r*Q,v+=r*G,y+=r*W,b+=r*Z,k+=r*Y,n+=(r=t[1])*D,s+=r*I,c+=r*R,u+=r*N,p+=r*L,l+=r*U,m+=r*H,h+=r*$,d+=r*M,f+=r*K,g+=r*V,v+=r*Q,y+=r*G,b+=r*W,k+=r*Z,x+=r*Y,s+=(r=t[2])*D,c+=r*I,u+=r*R,p+=r*N,l+=r*L,m+=r*U,h+=r*H,d+=r*$,f+=r*M,g+=r*K,v+=r*V,y+=r*Q,b+=r*G,k+=r*W,x+=r*Z,w+=r*Y,c+=(r=t[3])*D,u+=r*I,p+=r*R,l+=r*N,m+=r*L,h+=r*U,d+=r*H,f+=r*$,g+=r*M,v+=r*K,y+=r*V,b+=r*Q,k+=r*G,x+=r*W,w+=r*Z,j+=r*Y,u+=(r=t[4])*D,p+=r*I,l+=r*R,m+=r*N,h+=r*L,d+=r*U,f+=r*H,g+=r*$,v+=r*M,y+=r*K,b+=r*V,k+=r*Q,x+=r*G,w+=r*W,j+=r*Z,_+=r*Y,p+=(r=t[5])*D,l+=r*I,m+=r*R,h+=r*N,d+=r*L,f+=r*U,g+=r*H,v+=r*$,y+=r*M,b+=r*K,k+=r*V,x+=r*Q,w+=r*G,j+=r*W,_+=r*Z,S+=r*Y,l+=(r=t[6])*D,m+=r*I,h+=r*R,d+=r*N,f+=r*L,g+=r*U,v+=r*H,y+=r*$,b+=r*M,k+=r*K,x+=r*V,w+=r*Q,j+=r*G,_+=r*W,S+=r*Z,E+=r*Y,m+=(r=t[7])*D,h+=r*I,d+=r*R,f+=r*N,g+=r*L,v+=r*U,y+=r*H,b+=r*$,k+=r*M,x+=r*K,w+=r*V,j+=r*Q,_+=r*G,S+=r*W,E+=r*Z,F+=r*Y,h+=(r=t[8])*D,d+=r*I,f+=r*R,g+=r*N,v+=r*L,y+=r*U,b+=r*H,k+=r*$,x+=r*M,w+=r*K,j+=r*V,_+=r*Q,S+=r*G,E+=r*W,F+=r*Z,P+=r*Y,d+=(r=t[9])*D,f+=r*I,g+=r*R,v+=r*N,y+=r*L,b+=r*U,k+=r*H,x+=r*$,w+=r*M,j+=r*K,_+=r*V,S+=r*Q,E+=r*G,F+=r*W,P+=r*Z,z+=r*Y,f+=(r=t[10])*D,g+=r*I,v+=r*R,y+=r*N,b+=r*L,k+=r*U,x+=r*H,w+=r*$,j+=r*M,_+=r*K,S+=r*V,E+=r*Q,F+=r*G,P+=r*W,z+=r*Z,C+=r*Y,g+=(r=t[11])*D,v+=r*I,y+=r*R,b+=r*N,k+=r*L,x+=r*U,w+=r*H,j+=r*$,_+=r*M,S+=r*K,E+=r*V,F+=r*Q,P+=r*G,z+=r*W,C+=r*Z,A+=r*Y,v+=(r=t[12])*D,y+=r*I,b+=r*R,k+=r*N,x+=r*L,w+=r*U,j+=r*H,_+=r*$,S+=r*M,E+=r*K,F+=r*V,P+=r*Q,z+=r*G,C+=r*W,A+=r*Z,O+=r*Y,y+=(r=t[13])*D,b+=r*I,k+=r*R,x+=r*N,w+=r*L,j+=r*U,_+=r*H,S+=r*$,E+=r*M,F+=r*K,P+=r*V,z+=r*Q,C+=r*G,A+=r*W,O+=r*Z,q+=r*Y,b+=(r=t[14])*D,k+=r*I,x+=r*R,w+=r*N,j+=r*L,_+=r*U,S+=r*H,E+=r*$,F+=r*M,P+=r*K,z+=r*V,C+=r*Q,A+=r*G,O+=r*W,q+=r*Z,T+=r*Y,k+=(r=t[15])*D,n+=38*(w+=r*R),s+=38*(j+=r*N),c+=38*(_+=r*L),u+=38*(S+=r*U),p+=38*(E+=r*H),l+=38*(F+=r*$),m+=38*(P+=r*M),h+=38*(z+=r*K),d+=38*(C+=r*V),f+=38*(A+=r*Q),g+=38*(O+=r*G),v+=38*(q+=r*W),y+=38*(T+=r*Z),b+=38*(B+=r*Y),o=(r=(o+=38*(x+=r*I))+(i=1)+65535)-65536*(i=Math.floor(r/65536)),n=(r=n+i+65535)-65536*(i=Math.floor(r/65536)),s=(r=s+i+65535)-65536*(i=Math.floor(r/65536)),c=(r=c+i+65535)-65536*(i=Math.floor(r/65536)),u=(r=u+i+65535)-65536*(i=Math.floor(r/65536)),p=(r=p+i+65535)-65536*(i=Math.floor(r/65536)),l=(r=l+i+65535)-65536*(i=Math.floor(r/65536)),m=(r=m+i+65535)-65536*(i=Math.floor(r/65536)),h=(r=h+i+65535)-65536*(i=Math.floor(r/65536)),d=(r=d+i+65535)-65536*(i=Math.floor(r/65536)),f=(r=f+i+65535)-65536*(i=Math.floor(r/65536)),g=(r=g+i+65535)-65536*(i=Math.floor(r/65536)),v=(r=v+i+65535)-65536*(i=Math.floor(r/65536)),y=(r=y+i+65535)-65536*(i=Math.floor(r/65536)),b=(r=b+i+65535)-65536*(i=Math.floor(r/65536)),k=(r=k+i+65535)-65536*(i=Math.floor(r/65536)),o=(r=(o+=i-1+37*(i-1))+(i=1)+65535)-65536*(i=Math.floor(r/65536)),n=(r=n+i+65535)-65536*(i=Math.floor(r/65536)),s=(r=s+i+65535)-65536*(i=Math.floor(r/65536)),c=(r=c+i+65535)-65536*(i=Math.floor(r/65536)),u=(r=u+i+65535)-65536*(i=Math.floor(r/65536)),p=(r=p+i+65535)-65536*(i=Math.floor(r/65536)),l=(r=l+i+65535)-65536*(i=Math.floor(r/65536)),m=(r=m+i+65535)-65536*(i=Math.floor(r/65536)),h=(r=h+i+65535)-65536*(i=Math.floor(r/65536)),d=(r=d+i+65535)-65536*(i=Math.floor(r/65536)),f=(r=f+i+65535)-65536*(i=Math.floor(r/65536)),g=(r=g+i+65535)-65536*(i=Math.floor(r/65536)),v=(r=v+i+65535)-65536*(i=Math.floor(r/65536)),y=(r=y+i+65535)-65536*(i=Math.floor(r/65536)),b=(r=b+i+65535)-65536*(i=Math.floor(r/65536)),k=(r=k+i+65535)-65536*(i=Math.floor(r/65536)),o+=i-1+37*(i-1),e[0]=o,e[1]=n,e[2]=s,e[3]=c,e[4]=u,e[5]=p,e[6]=l,e[7]=m,e[8]=h,e[9]=d,e[10]=f,e[11]=g,e[12]=v,e[13]=y,e[14]=b,e[15]=k}function L(e,t){N(e,t,t)}function U(e,a){var r,i=t();for(r=0;r<16;r++)i[r]=a[r];for(r=253;r>=0;r--)L(i,i),2!==r&&4!==r&&N(i,i,a);for(r=0;r<16;r++)e[r]=i[r]}function H(e,a,r){var i,o,n=new Uint8Array(32),s=new Float64Array(80),u=t(),p=t(),l=t(),m=t(),h=t(),d=t();for(o=0;o<31;o++)n[o]=a[o];for(n[31]=127&a[31]|64,n[0]&=248,D(s,r),o=0;o<16;o++)p[o]=s[o],m[o]=u[o]=l[o]=0;for(u[0]=m[0]=1,o=254;o>=0;--o)O(u,p,i=n[o>>>3]>>>(7&o)&1),O(l,m,i),I(h,u,l),R(u,u,l),I(l,p,m),R(p,p,m),L(m,h),L(d,u),N(u,l,u),N(l,p,h),I(h,u,l),R(u,u,l),L(p,u),R(l,m,d),N(u,l,c),I(u,u,m),N(l,l,u),N(u,m,d),N(m,p,s),L(p,h),O(u,p,i),O(l,m,i);for(o=0;o<16;o++)s[o+16]=u[o],s[o+32]=l[o],s[o+48]=p[o],s[o+64]=m[o];var f=s.subarray(32),g=s.subarray(16);return U(f,f),N(g,g,f),q(e,g),0}function $(e,t){return H(e,t,o)}function M(e,t){return r(t,32),$(e,t)}function K(e,t,a){var r=new Uint8Array(32);return H(r,a,t),b(e,i,r,k)}S.prototype.blocks=function(e,t,a){for(var r,i,o,n,s,c,u,p,l,m,h,d,f,g,v,y,b,k,x,w=this.fin?0:2048,j=this.h[0],_=this.h[1],S=this.h[2],E=this.h[3],F=this.h[4],P=this.h[5],z=this.h[6],C=this.h[7],A=this.h[8],O=this.h[9],q=this.r[0],T=this.r[1],B=this.r[2],D=this.r[3],I=this.r[4],R=this.r[5],N=this.r[6],L=this.r[7],U=this.r[8],H=this.r[9];a>=16;)m=l=0,m+=(j+=8191&(r=255&e[t+0]|(255&e[t+1])<<8))*q,m+=(_+=8191&(r>>>13|(i=255&e[t+2]|(255&e[t+3])<<8)<<3))*(5*H),m+=(S+=8191&(i>>>10|(o=255&e[t+4]|(255&e[t+5])<<8)<<6))*(5*U),m+=(E+=8191&(o>>>7|(n=255&e[t+6]|(255&e[t+7])<<8)<<9))*(5*L),l=(m+=(F+=8191&(n>>>4|(s=255&e[t+8]|(255&e[t+9])<<8)<<12))*(5*N))>>>13,m&=8191,m+=(P+=s>>>1&8191)*(5*R),m+=(z+=8191&(s>>>14|(c=255&e[t+10]|(255&e[t+11])<<8)<<2))*(5*I),m+=(C+=8191&(c>>>11|(u=255&e[t+12]|(255&e[t+13])<<8)<<5))*(5*D),m+=(A+=8191&(u>>>8|(p=255&e[t+14]|(255&e[t+15])<<8)<<8))*(5*B),h=l+=(m+=(O+=p>>>5|w)*(5*T))>>>13,h+=j*T,h+=_*q,h+=S*(5*H),h+=E*(5*U),l=(h+=F*(5*L))>>>13,h&=8191,h+=P*(5*N),h+=z*(5*R),h+=C*(5*I),h+=A*(5*D),l+=(h+=O*(5*B))>>>13,h&=8191,d=l,d+=j*B,d+=_*T,d+=S*q,d+=E*(5*H),l=(d+=F*(5*U))>>>13,d&=8191,d+=P*(5*L),d+=z*(5*N),d+=C*(5*R),d+=A*(5*I),f=l+=(d+=O*(5*D))>>>13,f+=j*D,f+=_*B,f+=S*T,f+=E*q,l=(f+=F*(5*H))>>>13,f&=8191,f+=P*(5*U),f+=z*(5*L),f+=C*(5*N),f+=A*(5*R),g=l+=(f+=O*(5*I))>>>13,g+=j*I,g+=_*D,g+=S*B,g+=E*T,l=(g+=F*q)>>>13,g&=8191,g+=P*(5*H),g+=z*(5*U),g+=C*(5*L),g+=A*(5*N),v=l+=(g+=O*(5*R))>>>13,v+=j*R,v+=_*I,v+=S*D,v+=E*B,l=(v+=F*T)>>>13,v&=8191,v+=P*q,v+=z*(5*H),v+=C*(5*U),v+=A*(5*L),y=l+=(v+=O*(5*N))>>>13,y+=j*N,y+=_*R,y+=S*I,y+=E*D,l=(y+=F*B)>>>13,y&=8191,y+=P*T,y+=z*q,y+=C*(5*H),y+=A*(5*U),b=l+=(y+=O*(5*L))>>>13,b+=j*L,b+=_*N,b+=S*R,b+=E*I,l=(b+=F*D)>>>13,b&=8191,b+=P*B,b+=z*T,b+=C*q,b+=A*(5*H),k=l+=(b+=O*(5*U))>>>13,k+=j*U,k+=_*L,k+=S*N,k+=E*R,l=(k+=F*I)>>>13,k&=8191,k+=P*D,k+=z*B,k+=C*T,k+=A*q,x=l+=(k+=O*(5*H))>>>13,x+=j*H,x+=_*U,x+=S*L,x+=E*N,l=(x+=F*R)>>>13,x&=8191,x+=P*I,x+=z*D,x+=C*B,x+=A*T,j=m=8191&(l=(l=((l+=(x+=O*q)>>>13)<<2)+l|0)+(m&=8191)|0),_=h+=l>>>=13,S=d&=8191,E=f&=8191,F=g&=8191,P=v&=8191,z=y&=8191,C=b&=8191,A=k&=8191,O=x&=8191,t+=16,a-=16;this.h[0]=j,this.h[1]=_,this.h[2]=S,this.h[3]=E,this.h[4]=F,this.h[5]=P,this.h[6]=z,this.h[7]=C,this.h[8]=A,this.h[9]=O},S.prototype.finish=function(e,t){var a,r,i,o,n=new Uint16Array(10);if(this.leftover){for(o=this.leftover,this.buffer[o++]=1;o<16;o++)this.buffer[o]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(a=this.h[1]>>>13,this.h[1]&=8191,o=2;o<10;o++)this.h[o]+=a,a=this.h[o]>>>13,this.h[o]&=8191;for(this.h[0]+=5*a,a=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=a,a=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=a,n[0]=this.h[0]+5,a=n[0]>>>13,n[0]&=8191,o=1;o<10;o++)n[o]=this.h[o]+a,a=n[o]>>>13,n[o]&=8191;for(n[9]-=8192,r=(1^a)-1,o=0;o<10;o++)n[o]&=r;for(r=~r,o=0;o<10;o++)this.h[o]=this.h[o]&r|n[o];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),i=this.h[0]+this.pad[0],this.h[0]=65535&i,o=1;o<8;o++)i=(this.h[o]+this.pad[o]|0)+(i>>>16)|0,this.h[o]=65535&i;e[t+0]=this.h[0]>>>0&255,e[t+1]=this.h[0]>>>8&255,e[t+2]=this.h[1]>>>0&255,e[t+3]=this.h[1]>>>8&255,e[t+4]=this.h[2]>>>0&255,e[t+5]=this.h[2]>>>8&255,e[t+6]=this.h[3]>>>0&255,e[t+7]=this.h[3]>>>8&255,e[t+8]=this.h[4]>>>0&255,e[t+9]=this.h[4]>>>8&255,e[t+10]=this.h[5]>>>0&255,e[t+11]=this.h[5]>>>8&255,e[t+12]=this.h[6]>>>0&255,e[t+13]=this.h[6]>>>8&255,e[t+14]=this.h[7]>>>0&255,e[t+15]=this.h[7]>>>8&255},S.prototype.update=function(e,t,a){var r,i;if(this.leftover){for((i=16-this.leftover)>a&&(i=a),r=0;r=16&&(i=a-a%16,this.blocks(e,t,i),t+=i,a-=i),a){for(r=0;r=128;){for(w=0;w<16;w++)j=8*w+W,C[w]=a[j+0]<<24|a[j+1]<<16|a[j+2]<<8|a[j+3],A[w]=a[j+4]<<24|a[j+5]<<16|a[j+6]<<8|a[j+7];for(w=0;w<80;w++)if(i=O,o=q,n=T,s=B,c=D,u=I,p=R,N,m=L,h=U,d=H,f=$,g=M,v=K,y=V,Q,E=65535&(S=Q),F=S>>>16,P=65535&(_=N),z=_>>>16,E+=65535&(S=(M>>>14|D<<18)^(M>>>18|D<<14)^(D>>>9|M<<23)),F+=S>>>16,P+=65535&(_=(D>>>14|M<<18)^(D>>>18|M<<14)^(M>>>9|D<<23)),z+=_>>>16,E+=65535&(S=M&K^~M&V),F+=S>>>16,P+=65535&(_=D&I^~D&R),z+=_>>>16,_=G[2*w],E+=65535&(S=G[2*w+1]),F+=S>>>16,P+=65535&_,z+=_>>>16,_=C[w%16],F+=(S=A[w%16])>>>16,P+=65535&_,z+=_>>>16,P+=(F+=(E+=65535&S)>>>16)>>>16,E=65535&(S=x=65535&E|F<<16),F=S>>>16,P=65535&(_=k=65535&P|(z+=P>>>16)<<16),z=_>>>16,E+=65535&(S=(L>>>28|O<<4)^(O>>>2|L<<30)^(O>>>7|L<<25)),F+=S>>>16,P+=65535&(_=(O>>>28|L<<4)^(L>>>2|O<<30)^(L>>>7|O<<25)),z+=_>>>16,F+=(S=L&U^L&H^U&H)>>>16,P+=65535&(_=O&q^O&T^q&T),z+=_>>>16,l=65535&(P+=(F+=(E+=65535&S)>>>16)>>>16)|(z+=P>>>16)<<16,b=65535&E|F<<16,E=65535&(S=f),F=S>>>16,P=65535&(_=s),z=_>>>16,F+=(S=x)>>>16,P+=65535&(_=k),z+=_>>>16,q=i,T=o,B=n,D=s=65535&(P+=(F+=(E+=65535&S)>>>16)>>>16)|(z+=P>>>16)<<16,I=c,R=u,N=p,O=l,U=m,H=h,$=d,M=f=65535&E|F<<16,K=g,V=v,Q=y,L=b,w%16==15)for(j=0;j<16;j++)_=C[j],E=65535&(S=A[j]),F=S>>>16,P=65535&_,z=_>>>16,_=C[(j+9)%16],E+=65535&(S=A[(j+9)%16]),F+=S>>>16,P+=65535&_,z+=_>>>16,k=C[(j+1)%16],E+=65535&(S=((x=A[(j+1)%16])>>>1|k<<31)^(x>>>8|k<<24)^(x>>>7|k<<25)),F+=S>>>16,P+=65535&(_=(k>>>1|x<<31)^(k>>>8|x<<24)^k>>>7),z+=_>>>16,k=C[(j+14)%16],F+=(S=((x=A[(j+14)%16])>>>19|k<<13)^(k>>>29|x<<3)^(x>>>6|k<<26))>>>16,P+=65535&(_=(k>>>19|x<<13)^(x>>>29|k<<3)^k>>>6),z+=_>>>16,z+=(P+=(F+=(E+=65535&S)>>>16)>>>16)>>>16,C[j]=65535&P|z<<16,A[j]=65535&E|F<<16;E=65535&(S=L),F=S>>>16,P=65535&(_=O),z=_>>>16,_=e[0],F+=(S=t[0])>>>16,P+=65535&_,z+=_>>>16,z+=(P+=(F+=(E+=65535&S)>>>16)>>>16)>>>16,e[0]=O=65535&P|z<<16,t[0]=L=65535&E|F<<16,E=65535&(S=U),F=S>>>16,P=65535&(_=q),z=_>>>16,_=e[1],F+=(S=t[1])>>>16,P+=65535&_,z+=_>>>16,z+=(P+=(F+=(E+=65535&S)>>>16)>>>16)>>>16,e[1]=q=65535&P|z<<16,t[1]=U=65535&E|F<<16,E=65535&(S=H),F=S>>>16,P=65535&(_=T),z=_>>>16,_=e[2],F+=(S=t[2])>>>16,P+=65535&_,z+=_>>>16,z+=(P+=(F+=(E+=65535&S)>>>16)>>>16)>>>16,e[2]=T=65535&P|z<<16,t[2]=H=65535&E|F<<16,E=65535&(S=$),F=S>>>16,P=65535&(_=B),z=_>>>16,_=e[3],F+=(S=t[3])>>>16,P+=65535&_,z+=_>>>16,z+=(P+=(F+=(E+=65535&S)>>>16)>>>16)>>>16,e[3]=B=65535&P|z<<16,t[3]=$=65535&E|F<<16,E=65535&(S=M),F=S>>>16,P=65535&(_=D),z=_>>>16,_=e[4],F+=(S=t[4])>>>16,P+=65535&_,z+=_>>>16,z+=(P+=(F+=(E+=65535&S)>>>16)>>>16)>>>16,e[4]=D=65535&P|z<<16,t[4]=M=65535&E|F<<16,E=65535&(S=K),F=S>>>16,P=65535&(_=I),z=_>>>16,_=e[5],F+=(S=t[5])>>>16,P+=65535&_,z+=_>>>16,z+=(P+=(F+=(E+=65535&S)>>>16)>>>16)>>>16,e[5]=I=65535&P|z<<16,t[5]=K=65535&E|F<<16,E=65535&(S=V),F=S>>>16,P=65535&(_=R),z=_>>>16,_=e[6],F+=(S=t[6])>>>16,P+=65535&_,z+=_>>>16,z+=(P+=(F+=(E+=65535&S)>>>16)>>>16)>>>16,e[6]=R=65535&P|z<<16,t[6]=V=65535&E|F<<16,E=65535&(S=Q),F=S>>>16,P=65535&(_=N),z=_>>>16,_=e[7],F+=(S=t[7])>>>16,P+=65535&_,z+=_>>>16,z+=(P+=(F+=(E+=65535&S)>>>16)>>>16)>>>16,e[7]=N=65535&P|z<<16,t[7]=Q=65535&E|F<<16,W+=128,r-=128}return r}function Z(e,t,a){var r,i=new Int32Array(8),o=new Int32Array(8),n=new Uint8Array(256),s=a;for(i[0]=1779033703,i[1]=3144134277,i[2]=1013904242,i[3]=2773480762,i[4]=1359893119,i[5]=2600822924,i[6]=528734635,i[7]=1541459225,o[0]=4089235720,o[1]=2227873595,o[2]=4271175723,o[3]=1595750129,o[4]=2917565137,o[5]=725511199,o[6]=4215389547,o[7]=327033209,W(i,o,t,a),a%=128,r=0;r=0;--i)J(e,t,r=a[i/8|0]>>(7&i)&1),Y(t,e),Y(e,e),J(e,t,r)}function te(e,a){var r=[t(),t(),t(),t()];C(r[0],l),C(r[1],m),C(r[2],s),N(r[3],l,m),ee(e,r,a)}function ae(e,a,i){var o,n=new Uint8Array(64),s=[t(),t(),t(),t()];for(i||r(a,32),Z(n,a,32),n[0]&=248,n[31]&=127,n[31]|=64,te(s,n),X(e,s),o=0;o<32;o++)a[o+32]=e[o];return 0}var re=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function ie(e,t){var a,r,i,o;for(r=63;r>=32;--r){for(a=0,i=r-32,o=r-12;i>8,t[i]-=256*a;t[i]+=a,t[r]=0}for(a=0,i=0;i<32;i++)t[i]+=a-(t[31]>>4)*re[i],a=t[i]>>8,t[i]&=255;for(i=0;i<32;i++)t[i]-=a*re[i];for(r=0;r<32;r++)t[r+1]+=t[r]>>8,e[r]=255&t[r]}function oe(e){var t,a=new Float64Array(64);for(t=0;t<64;t++)a[t]=e[t];for(t=0;t<64;t++)e[t]=0;ie(e,a)}function ne(e,a,r,i){var o,n,s=new Uint8Array(64),c=new Uint8Array(64),u=new Uint8Array(64),p=new Float64Array(64),l=[t(),t(),t(),t()];Z(s,i,32),s[0]&=248,s[31]&=127,s[31]|=64;var m=r+64;for(o=0;o=0;r--)L(i,i),1!==r&&N(i,i,a);for(r=0;r<16;r++)e[r]=i[r]}(r,r),N(r,r,o),N(r,r,c),N(r,r,c),N(e[0],r,c),L(i,e[0]),N(i,i,c),T(i,o)&&N(e[0],e[0],h),L(i,e[0]),N(i,i,c),T(i,o)?-1:(B(e[0])===a[31]>>7&&R(e[0],n,e[0]),N(e[3],e[0],e[1]),0)}function ce(e,a,r,i){var o,n=new Uint8Array(32),s=new Uint8Array(64),c=[t(),t(),t(),t()],u=[t(),t(),t(),t()];if(-1,r<64)return-1;if(se(u,i))return-1;for(o=0;o=0},e.sign.keyPair=function(){var e=new Uint8Array(32),t=new Uint8Array(64);return ae(e,t),{publicKey:e,secretKey:t}},e.sign.keyPair.fromSecretKey=function(e){if(fe(e),64!==e.length)throw new Error("bad secret key size");for(var t=new Uint8Array(32),a=0;a=this._buffer.length},o.prototype.remainder=function(){return this._buffer.slice(this._offset)},o.prototype.skip=function(e){this._offset+=e},o.prototype.expand=function(){this._size*=2;var e=i.alloc(this._size);this._buffer.copy(e,0),this._buffer=e},o.prototype.readPart=function(){return{data:this.readBuffer()}},o.prototype.readBuffer=function(){var e=this._buffer.readUInt32BE(this._offset);this._offset+=4,r.ok(this._offset+e<=this._buffer.length,"length out of bounds at +0x"+this._offset.toString(16)+" (data truncated?)");var t=this._buffer.slice(this._offset,this._offset+e);return this._offset+=e,t},o.prototype.readString=function(){return this.readBuffer().toString()},o.prototype.readCString=function(){for(var e=this._offset;ethis._size;)this.expand();this._buffer.writeUInt32BE(e.length,this._offset),this._offset+=4,e.copy(this._buffer,this._offset),this._offset+=e.length},o.prototype.writeString=function(e){this.writeBuffer(i.from(e,"utf8"))},o.prototype.writeCString=function(e){for(;this._offset+1+e.length>this._size;)this.expand();this._buffer.write(e,this._offset),this._offset+=e.length,this._buffer[this._offset++]=0},o.prototype.writeInt=function(e){for(;this._offset+4>this._size;)this.expand();this._buffer.writeUInt32BE(e,this._offset),this._offset+=4},o.prototype.writeInt64=function(e){if(r.buffer(e,"value"),e.length>8){for(var t=e.slice(0,e.length-8),a=0;athis._size;)this.expand();e.copy(this._buffer,this._offset),this._offset+=8},o.prototype.writeChar=function(e){for(;this._offset+1>this._size;)this.expand();this._buffer[this._offset++]=e},o.prototype.writePart=function(e){this.writeBuffer(e.data)},o.prototype.write=function(e){for(;this._offset+e.length>this._size;)this.expand();e.copy(this._buffer,this._offset),this._offset+=e.length}},function(e,t,a){e.exports={read:function(e,t){return p.read(e,t,"pkcs8")},readPkcs8:function(e,t,a){a.peek()===i.Ber.Integer&&(r.strictEqual(t,"private","unexpected Integer at start of public key"),a.readString(i.Ber.Integer,!0));a.readSequence();var n=a.offset+a.length,p=a.readOID();switch(p){case"1.2.840.113549.1.1.1":return a._offset=n,"public"===t?function(e){e.readSequence(i.Ber.BitString),e.readByte(),e.readSequence();var t=l(e,"modulus"),a=l(e,"exponent"),r={type:"rsa",source:e.originalInput,parts:[{name:"e",data:a},{name:"n",data:t}]};return new c(r)}(a):function(e){e.readSequence(i.Ber.OctetString),e.readSequence();var t=l(e,"version");r.equal(t[0],0,"unknown RSA private key version");var a=l(e,"modulus"),o=l(e,"public exponent"),n=l(e,"private exponent"),s=l(e,"prime1"),c=l(e,"prime2"),p=l(e,"exponent1"),m=l(e,"exponent2"),h=l(e,"iqmp");return new u({type:"rsa",parts:[{name:"n",data:a},{name:"e",data:o},{name:"d",data:n},{name:"iqmp",data:h},{name:"p",data:s},{name:"q",data:c},{name:"dmodp",data:p},{name:"dmodq",data:m}]})}(a);case"1.2.840.10040.4.1":return"public"===t?function(e){e.readSequence();var t=l(e,"p"),a=l(e,"q"),r=l(e,"g");e.readSequence(i.Ber.BitString),e.readByte();var o=l(e,"y");return new c({type:"dsa",parts:[{name:"p",data:t},{name:"q",data:a},{name:"g",data:r},{name:"y",data:o}]})}(a):function(e){e.readSequence();var t=l(e,"p"),a=l(e,"q"),r=l(e,"g");e.readSequence(i.Ber.OctetString);var o=l(e,"x"),n=s.calculateDSAPublic(r,t,o);return new u({type:"dsa",parts:[{name:"p",data:t},{name:"q",data:a},{name:"g",data:r},{name:"y",data:n},{name:"x",data:o}]})}(a);case"1.2.840.10045.2.1":return"public"===t?function(e){var t=m(e);r.string(t,"a known elliptic curve");var a=e.readString(i.Ber.BitString,!0);a=s.ecNormalize(a);var n={type:"ecdsa",parts:[{name:"curve",data:o.from(t)},{name:"Q",data:a}]};return new c(n)}(a):function(e){var t=m(e);r.string(t,"a known elliptic curve"),e.readSequence(i.Ber.OctetString),e.readSequence();var a=l(e,"version");r.equal(a[0],1,"unknown version of ECDSA key");var n,c=e.readString(i.Ber.OctetString,!0);160==e.peek()&&(e.readSequence(160),e._offset+=e.length);161==e.peek()&&(e.readSequence(161),n=e.readString(i.Ber.BitString,!0),n=s.ecNormalize(n));if(void 0===n){var p=s.publicFromPrivateECDSA(t,c);n=p.part.Q.data}var h={type:"ecdsa",parts:[{name:"curve",data:o.from(t)},{name:"Q",data:n},{name:"d",data:c}]};return new u(h)}(a);case"1.3.101.112":return"public"===t?function(e){0===e.peek()&&e.readByte();var t=s.readBitString(e),a={type:"ed25519",parts:[{name:"A",data:s.zeroPadToLength(t,32)}]};return new c(a)}(a):function(e){0===e.peek()&&e.readByte();e.readSequence(i.Ber.OctetString);var t,a=e.readString(i.Ber.OctetString,!0);a=s.zeroPadToLength(a,32),e.peek()===i.Ber.BitString?(t=s.readBitString(e),t=s.zeroPadToLength(t,32)):t=s.calculateED25519Public(a);var r={type:"ed25519",parts:[{name:"A",data:s.zeroPadToLength(t,32)},{name:"k",data:s.zeroPadToLength(a,32)}]};return new u(r)}(a);case"1.3.101.110":return"public"===t?function(e){var t=s.readBitString(e),a={type:"curve25519",parts:[{name:"A",data:s.zeroPadToLength(t,32)}]};return new c(a)}(a):function(e){0===e.peek()&&e.readByte();e.readSequence(i.Ber.OctetString);var t=e.readString(i.Ber.OctetString,!0);t=s.zeroPadToLength(t,32);var a=s.calculateX25519Public(t),r={type:"curve25519",parts:[{name:"A",data:s.zeroPadToLength(a,32)},{name:"k",data:s.zeroPadToLength(t,32)}]};return new u(r)}(a);default:throw new Error("Unknown key type OID "+p)}},write:function(e,t){return p.write(e,t,"pkcs8")},writePkcs8:h,pkcs8ToBuffer:function(e){var t=new i.BerWriter;return h(t,e),t.buffer},readECDSACurve:m,writeECDSACurve:d};var r=a(0),i=a(11),o=a(2).Buffer,n=a(8),s=a(6),c=a(5),u=a(7),p=a(14);function l(e,t){return r.strictEqual(e.peek(),i.Ber.Integer,t+" is not an Integer"),s.mpNormalize(e.readString(i.Ber.Integer,!0))}function m(e){var t,a,c,u,p;if(e.peek()===i.Ber.OID){var l=e.readOID();for(a=Object.keys(n.curves),c=0;c=this.validFrom.getTime()&&e.getTime()0&&-1===this.issuer.purposes.indexOf("ca"))&&this.isSignedByKey(e.subjectKey))},g.prototype.getExtension=function(e){return r.string(e,"keyOrOid"),this.getExtensions().filter(function(t){return"x509"===t.format?t.oid===e:"openssh"===t.format&&t.name===e})[0]},g.prototype.getExtensions=function(){var e=[],t=this.signatures.x509;t&&t.extras&&t.extras.exts&&t.extras.exts.forEach(function(t){t.format="x509",e.push(t)});var a=this.signatures.openssh;return a&&a.exts&&a.exts.forEach(function(t){t.format="openssh",e.push(t)}),e},g.prototype.isSignedByKey=function(e){if(u.assertCompatible(e,p,[1,2],"issuerKey"),void 0!==this.issuerKey)return this.issuerKey.fingerprint("sha512").matches(e);var t=Object.keys(this.signatures)[0],a=h[t].verify(this,e);return a&&(this.issuerKey=e),a},g.prototype.signWith=function(e){u.assertCompatible(e,l,[1,2],"key");for(var t=Object.keys(h),a=!1,r=0;r0&&-1===h.indexOf("serverAuth")&&h.push("serverAuth"),f.length>0&&-1===h.indexOf("clientAuth")&&h.push("clientAuth"),(f.length>0||d.length>0)&&(-1===h.indexOf("keyAgreement")&&h.push("keyAgreement"),"rsa"===t.type&&-1===h.indexOf("encryption")&&h.push("encryption"))}var v=new g({subjects:o,issuer:o[0],subjectKey:t.toPublic(),issuerKey:t.toPublic(),signatures:{},serial:p,validFrom:n,validUntil:s,purposes:h});return v.signWith(t),v},g.create=function(e,t,a,o,n){var s;s=Array.isArray(e)?e:[e],r.arrayOfObject(s),s.forEach(function(e){u.assertCompatible(e,m,[1,0],"subject")}),u.assertCompatible(t,p,[1,0],"key"),l.isPrivateKey(t)&&(t=t.toPublic()),u.assertCompatible(a,m,[1,0],"issuer"),u.assertCompatible(o,l,[1,2],"issuer key"),r.optionalObject(n,"options"),void 0===n&&(n={}),r.optionalObject(n.validFrom,"options.validFrom"),r.optionalObject(n.validUntil,"options.validUntil");var c=n.validFrom,h=n.validUntil;if(void 0===c&&(c=new Date),void 0===h){r.optionalNumber(n.lifetime,"options.lifetime");var d=n.lifetime;void 0===d&&(d=31536e4),(h=new Date).setTime(h.getTime()+1e3*d)}r.optionalBuffer(n.serial,"options.serial");var f=n.serial;void 0===f&&(f=i.from("0000000000000001","hex"));var v=n.purposes;void 0===v&&(v=[]),-1===v.indexOf("signature")&&v.push("signature"),!0===n.ca&&(-1===v.indexOf("ca")&&v.push("ca"),-1===v.indexOf("crl")&&v.push("crl"));var y=s.filter(function(e){return"host"===e.type}),b=s.filter(function(e){return"user"===e.type});y.length>0&&-1===v.indexOf("serverAuth")&&v.push("serverAuth"),b.length>0&&-1===v.indexOf("clientAuth")&&v.push("clientAuth"),(b.length>0||y.length>0)&&(-1===v.indexOf("keyAgreement")&&v.push("keyAgreement"),"rsa"===t.type&&-1===v.indexOf("encryption")&&v.push("encryption"));var k=new g({subjects:s,issuer:a,subjectKey:t,issuerKey:o.toPublic(),signatures:{},serial:f,validFrom:c,validUntil:h,purposes:v});return k.signWith(o),k},g.parse=function(e,t,a){"string"!=typeof e&&r.buffer(e,"data"),void 0===t&&(t="auto"),r.string(t,"format"),"string"==typeof a&&(a={filename:a}),r.optionalObject(a,"options"),void 0===a&&(a={}),r.optionalString(a.filename,"options.filename"),void 0===a.filename&&(a.filename="(unnamed)"),r.object(h[t],"formats[format]");try{return h[t].read(e,a)}catch(e){throw new d(a.filename,t,e)}},g.isCertificate=function(e,t){return u.isCompatible(e,g,t)},g.prototype._sshpkApiVersion=[1,1],g._oldVersionDetect=function(e){return[1,0]}},function(e,t,a){e.exports=p;var r=a(0),i=(a(8),a(3),a(22),a(10),a(9),a(4),a(6)),o=a(11),n=a(2).Buffer,s=/^([*]|[a-z0-9][a-z0-9\-]{0,62})(?:\.([*]|[a-z0-9][a-z0-9\-]{0,62}))*$/i,c={cn:"2.5.4.3",o:"2.5.4.10",ou:"2.5.4.11",l:"2.5.4.7",s:"2.5.4.8",c:"2.5.4.6",sn:"2.5.4.4",postalCode:"2.5.4.17",serialNumber:"2.5.4.5",street:"2.5.4.9",x500UniqueIdentifier:"2.5.4.45",role:"2.5.4.72",telephoneNumber:"2.5.4.20",description:"2.5.4.13",dc:"0.9.2342.19200300.100.1.25",uid:"0.9.2342.19200300.100.1.1",mail:"0.9.2342.19200300.100.1.3",title:"2.5.4.12",gn:"2.5.4.42",initials:"2.5.4.43",pseudonym:"2.5.4.65",emailAddress:"1.2.840.113549.1.9.1"},u={};function p(e){var t=this;if(r.object(e,"options"),r.arrayOfObject(e.components,"options.components"),this.components=e.components,this.componentLookup={},this.components.forEach(function(e){e.name&&!e.oid&&(e.oid=c[e.name]),e.oid&&!e.name&&(e.name=u[e.oid]),void 0===t.componentLookup[e.name]&&(t.componentLookup[e.name]=[]),t.componentLookup[e.name].push(e)}),this.componentLookup.cn&&this.componentLookup.cn.length>0&&(this.cn=this.componentLookup.cn[0].value),r.optionalString(e.type,"options.type"),void 0===e.type)1===this.components.length&&this.componentLookup.cn&&1===this.componentLookup.cn.length&&this.componentLookup.cn[0].value.match(s)?(this.type="host",this.hostname=this.componentLookup.cn[0].value):this.componentLookup.dc&&this.components.length===this.componentLookup.dc.length?(this.type="host",this.hostname=this.componentLookup.dc.map(function(e){return e.value}).join(".")):this.componentLookup.uid&&this.components.length===this.componentLookup.uid.length?(this.type="user",this.uid=this.componentLookup.uid[0].value):this.componentLookup.cn&&1===this.componentLookup.cn.length&&this.componentLookup.cn[0].value.match(s)?(this.type="host",this.hostname=this.componentLookup.cn[0].value):this.componentLookup.uid&&1===this.componentLookup.uid.length?(this.type="user",this.uid=this.componentLookup.uid[0].value):this.componentLookup.mail&&1===this.componentLookup.mail.length?(this.type="email",this.email=this.componentLookup.mail[0].value):this.componentLookup.cn&&1===this.componentLookup.cn.length?(this.type="user",this.uid=this.componentLookup.cn[0].value):this.type="unknown";else if(this.type=e.type,"host"===this.type)this.hostname=e.hostname;else if("user"===this.type)this.uid=e.uid;else{if("email"!==this.type)throw new Error("Unknown type "+this.type);this.email=e.email}}Object.keys(c).forEach(function(e){u[c[e]]=e}),p.prototype.toString=function(){return this.components.map(function(e){var t=e.name.toUpperCase();t=t.replace(/=/g,"\\=");var a=e.value;return t+"="+(a=a.replace(/,/g,"\\,"))}).join(", ")},p.prototype.get=function(e,t){r.string(e,"name");var a=this.componentLookup[e];if(void 0!==a&&0!==a.length){if(!t&&a.length>1)throw new Error("Multiple values for attribute "+e);return t?a.map(function(e){return e.value}):a[0].value}},p.prototype.toArray=function(e){return this.components.map(function(e){return{name:e.name,value:e.value}})};var l=/[^a-zA-Z0-9 '(),+.\/:=?-]/,m=/[^\x00-\x7f]/;function h(e,t){if("**"===e||"**"===t)return!0;var a=e.split("."),r=t.split(".");if(a.length!==r.length)return!1;for(var i=0;i0;){var o;if(null!==(o=/^,/.exec(i)))t[++a]="",i=i.slice(o[0].length);else if(null!==(o=/^\\,/.exec(i)))t[a]+=",",i=i.slice(o[0].length);else if(null!==(o=/^\\./.exec(i)))t[a]+=o[0],i=i.slice(o[0].length);else{if(null===(o=/^[^\\,]+/.exec(i)))throw new Error("Failed to parse DN");t[a]+=o[0],i=i.slice(o[0].length)}}return new p({components:t.map(function(e){for(var t=(e=e.trim()).indexOf("=");t>0&&"\\"===e.charAt(t-1);)t=e.indexOf("=",t+1);if(-1===t)throw new Error("Failed to parse DN");return{name:e.slice(0,t).toLowerCase().replace(/\\=/g,"="),value:e.slice(t+1)}})})},p.fromArray=function(e){return r.arrayOfObject(e,"components"),e.forEach(function(e){if(r.object(e,"component"),r.string(e.name,"component.name"),!n.isBuffer(e.value)&&"string"!=typeof e.value)throw new Error("Invalid component value")}),new p({components:e})},p.parseAsn1=function(e,t){var a=[];e.readSequence(t);for(var r=e.offset+e.length;e.offset0;--t){n=n.twice();var s=i.testBit(t);s!=a.testBit(t)&&(n=n.add(s?this:o))}return n},n.prototype.multiplyTwo=function(e,t,a){var r;r=e.bitLength()>a.bitLength()?e.bitLength()-1:a.bitLength()-1;for(var i=this.curve.getInfinity(),o=this.add(t);r>=0;)i=i.twice(),e.testBit(r)?i=a.testBit(r)?i.add(o):i.add(this):a.testBit(r)&&(i=i.add(t)),--r;return i},s.prototype.getQ=function(){return this.q},s.prototype.getA=function(){return this.a},s.prototype.getB=function(){return this.b},s.prototype.equals=function(e){return e==this||this.q.equals(e.q)&&this.a.equals(e.a)&&this.b.equals(e.b)},s.prototype.getInfinity=function(){return this.infinity},s.prototype.fromBigInteger=function(e){return new o(this.q,e)},s.prototype.reduce=function(e){this.reducer.reduce(e)},s.prototype.encodePointHex=function(e){if(e.isInfinity())return"00";var t=e.getX().toBigInteger().toString(16),a=e.getY().toBigInteger().toString(16),r=this.getQ().toString(16).length;for(r%2!=0&&r++;t.length128&&(-1==this.q.shiftRight(e-64).intValue()&&(this.r=r.ONE.shiftLeft(e).subtract(this.q)));return this.r},o.prototype.modMult=function(e,t){return this.modReduce(e.multiply(t))},o.prototype.modReduce=function(e){if(null!=this.getR()){for(var t=q.bitLength();e.bitLength()>t+1;){var a=e.shiftRight(t),i=e.subtract(a.shiftLeft(t));this.getR().equals(r.ONE)||(a=a.multiply(this.getR())),e=a.add(i)}for(;e.compareTo(q)>=0;)e=e.subtract(q)}else e=e.mod(q);return e},o.prototype.sqrt=function(){if(!this.q.testBit(0))throw"unsupported";if(this.q.testBit(1)){var e=new o(this.q,this.x.modPow(this.q.shiftRight(2).add(r.ONE),this.q));return e.square().equals(this)?e:null}var t=this.q.subtract(r.ONE),a=t.shiftRight(1);if(!this.x.modPow(a,this.q).equals(r.ONE))return null;var i,n,s=t.shiftRight(2).shiftLeft(1).add(r.ONE),c=this.x,u=modDouble(modDouble(c));do{var p;do{p=new r(this.q.bitLength(),new SecureRandom)}while(p.compareTo(this.q)>=0||!p.multiply(p).subtract(u).modPow(a,this.q).equals(t));var l=this.lucasSequence(p,c,s);if(i=l[0],n=l[1],this.modMult(n,n).equals(u))return n.testBit(0)&&(n=n.add(q)),n=n.shiftRight(1),new o(q,n)}while(i.equals(r.ONE)||i.equals(t));return null},o.prototype.lucasSequence=function(e,t,a){for(var i=a.bitLength(),o=a.getLowestSetBit(),n=r.ONE,s=r.TWO,c=e,u=r.ONE,p=r.ONE,l=i-1;l>=o+1;--l)u=this.modMult(u,p),a.testBit(l)?(p=this.modMult(u,t),n=this.modMult(n,c),s=this.modReduce(c.multiply(s).subtract(e.multiply(u))),c=this.modReduce(c.multiply(c).subtract(p.shiftLeft(1)))):(p=u,n=this.modReduce(n.multiply(s).subtract(u)),c=this.modReduce(c.multiply(s).subtract(e.multiply(u))),s=this.modReduce(s.multiply(s).subtract(u.shiftLeft(1))));u=this.modMult(u,p),p=this.modMult(u,t),n=this.modReduce(n.multiply(s).subtract(u)),s=this.modReduce(c.multiply(s).subtract(e.multiply(u))),u=this.modMult(u,p);for(l=1;l<=o;++l)n=this.modMult(n,s),s=this.modReduce(s.multiply(s).subtract(u.shiftLeft(1))),u=this.modMult(u,u);return[n,s]};t={ECCurveFp:s,ECPointFp:n,ECFieldElementFp:o};e.exports=t},function(e,t,a){e.exports={read:function(e,t){return u.read(e,t)},readSSHPrivate:function(e,t,c){var u=(t=new l({buffer:t})).readCString();i.strictEqual(u,h,"bad magic string");var d=t.readString(),f=t.readString(),g=t.readBuffer();if(1!==t.readInt())throw new Error("OpenSSH-format key file contains multiple keys: this is unsupported.");var v=t.readBuffer();if("public"===e)return i.ok(t.atEnd(),"excess bytes left after key"),p.read(v);var y=t.readBuffer();i.ok(t.atEnd(),"excess bytes left after key");var b=new l({buffer:g});switch(f){case"none":if("none"!==d)throw new Error('OpenSSH-format key uses KDF "none" but specifies a cipher other than "none"');break;case"bcrypt":var k=b.readBuffer(),x=b.readInt(),w=n.opensshCipherInfo(d);if(void 0===r&&(r=a(65)),"string"==typeof c.passphrase&&(c.passphrase=o.from(c.passphrase,"utf-8")),!o.isBuffer(c.passphrase))throw new m.KeyEncryptedError(c.filename,"OpenSSH");var j=new Uint8Array(c.passphrase),_=new Uint8Array(k),S=new Uint8Array(w.keySize+w.blockSize),E=r.pbkdf(j,j.length,_,_.length,S,S.length,x);if(0!==E)throw new Error("bcrypt_pbkdf function returned failure, parameters invalid");var F=(S=o.from(S)).slice(0,w.keySize),P=S.slice(w.keySize,w.keySize+w.blockSize),z=s.createDecipheriv(w.opensslName,F,P);z.setAutoPadding(!1);var C,A=[];for(z.once("error",function(e){if(-1!==e.toString().indexOf("bad decrypt"))throw new Error("Incorrect passphrase supplied, could not decrypt key");throw e}),z.write(y),z.end();null!==(C=z.read());)A.push(C);y=o.concat(A);break;default:throw new Error('OpenSSH-format key uses unknown KDF "'+f+'"')}var O=(t=new l({buffer:y})).readInt(),q=t.readInt();if(O!==q)throw new Error("Incorrect passphrase supplied, could not decrypt key");var T={},B=p.readInternal(T,"private",t.remainder());t.skip(T.consumed);var D=t.readString();return B.comment=D,B},write:function(e,t){var u;u=c.isPrivateKey(e)?e.toPublic():e;var p,m,d="none",f="none",g=o.alloc(0),v={blockSize:8};void 0!==t&&("string"==typeof(p=t.passphrase)&&(p=o.from(p,"utf-8")),void 0!==p&&(i.buffer(p,"options.passphrase"),i.optionalString(t.cipher,"options.cipher"),void 0===(d=t.cipher)&&(d="aes128-ctr"),v=n.opensshCipherInfo(d),f="bcrypt"));if(c.isPrivateKey(e)){m=new l({});var y=s.randomBytes(4).readUInt32BE(0);m.writeInt(y),m.writeInt(y),m.write(e.toBuffer("rfc4253")),m.writeString(e.comment||"");for(var b=1;m._offset%v.blockSize!=0;)m.writeChar(b++);m=m.toBuffer()}switch(f){case"none":break;case"bcrypt":var k=s.randomBytes(16),x=new l({});x.writeBuffer(k),x.writeInt(16),g=x.toBuffer(),void 0===r&&(r=a(65));var w=new Uint8Array(p),j=new Uint8Array(k),_=new Uint8Array(v.keySize+v.blockSize),S=r.pbkdf(w,w.length,j,j.length,_,_.length,16);if(0!==S)throw new Error("bcrypt_pbkdf function returned failure, parameters invalid");var E=(_=o.from(_)).slice(0,v.keySize),F=_.slice(v.keySize,v.keySize+v.blockSize),P=s.createCipheriv(v.opensslName,E,F);P.setAutoPadding(!1);var z,C=[];for(P.once("error",function(e){throw e}),P.write(m),P.end();null!==(z=P.read());)C.push(z);m=o.concat(C);break;default:throw new Error("Unsupported kdf "+f)}var A,O=new l({});O.writeCString(h),O.writeString(d),O.writeString(f),O.writeBuffer(g),O.writeInt(1),O.writeBuffer(u.toBuffer("rfc4253")),m&&O.writeBuffer(m);O=O.toBuffer(),A=c.isPrivateKey(e)?"OPENSSH PRIVATE KEY":"OPENSSH PUBLIC KEY";var q=O.toString("base64"),T=q.length+q.length/70+18+16+2*A.length+10;O=o.alloc(T);var B=0;B+=O.write("-----BEGIN "+A+"-----\n",B);for(var D=0;Dq.length&&(I=q.length),B+=O.write(q.slice(D,I),B),O[B++]=10,D=I}return B+=O.write("-----END "+A+"-----\n",B),O.slice(0,B)}};var r,i=a(0),o=(a(11),a(2).Buffer),n=(a(8),a(6)),s=a(3),c=(a(5),a(7)),u=a(14),p=a(15),l=a(25),m=a(9);var h="openssh-key-v1"},function(e,t){e.exports=function(e){return null!=e&&"object"==typeof e}},function(e,t,a){"use strict";var r=Object.prototype.hasOwnProperty,i=Object.prototype.toString,o=Object.defineProperty,n=Object.getOwnPropertyDescriptor,s=function(e){return"function"==typeof Array.isArray?Array.isArray(e):"[object Array]"===i.call(e)},c=function(e){if(!e||"[object Object]"!==i.call(e))return!1;var t,a=r.call(e,"constructor"),o=e.constructor&&e.constructor.prototype&&r.call(e.constructor.prototype,"isPrototypeOf");if(e.constructor&&!a&&!o)return!1;for(t in e);return void 0===t||r.call(e,t)},u=function(e,t){o&&"__proto__"===t.name?o(e,t.name,{enumerable:!0,configurable:!0,value:t.newValue,writable:!0}):e[t.name]=t.newValue},p=function(e,t){if("__proto__"===t){if(!r.call(e,t))return;if(n)return n(e,t).value}return e[t]};e.exports=function e(){var t,a,r,i,o,n,l=arguments[0],m=1,h=arguments.length,d=!1;for("boolean"==typeof l&&(d=l,l=arguments[1]||{},m=2),(null==l||"object"!=typeof l&&"function"!=typeof l)&&(l={});m32;)t=t.slice(1);var a=this._priv;r.strictEqual(t.length,32),r.strictEqual(a.length,32);var i=c.box.before(new Uint8Array(t),new Uint8Array(a));return o.from(i)}throw new Error("Invalid algorithm: "+this._algo)},d.prototype.generateKey=function(){var e,t,a=[];if("dsa"===this._algo)return this._dh.generateKeys(),a.push({name:"p",data:this._p.data}),a.push({name:"q",data:this._key.part.q.data}),a.push({name:"g",data:this._g.data}),a.push({name:"y",data:this._dh.getPublicKey()}),a.push({name:"x",data:this._dh.getPrivateKey()}),this._key=new p({type:"dsa",parts:a}),this._isPriv=!0,this._key;if("ecdsa"===this._algo){if(l)return this._dh.generateKeys(),a.push({name:"curve",data:o.from(this._curve)}),a.push({name:"Q",data:this._dh.getPublicKey()}),a.push({name:"d",data:this._dh.getPrivateKey()}),this._key=new p({type:"ecdsa",curve:this._curve,parts:a}),this._isPriv=!0,this._key;var n=this._ecParams.getN(),s=new h(i.randomBytes(n.bitLength())),u=n.subtract(h.ONE);return e=s.mod(u).add(h.ONE),t=this._ecParams.getG().multiply(e),e=o.from(e.toByteArray()),t=o.from(this._ecParams.getCurve().encodePointHex(t),"hex"),this._priv=new v(this._ecParams,e),a.push({name:"curve",data:o.from(this._curve)}),a.push({name:"Q",data:t}),a.push({name:"d",data:e}),this._key=new p({type:"ecdsa",curve:this._curve,parts:a}),this._isPriv=!0,this._key}if("curve25519"===this._algo){var m=c.box.keyPair();return e=o.from(m.secretKey),t=o.from(m.publicKey),e=o.concat([e,t]),r.strictEqual(e.length,64),r.strictEqual(t.length,32),a.push({name:"A",data:t}),a.push({name:"k",data:e}),this._key=new p({type:"curve25519",parts:a}),this._isPriv=!0,this._key}throw new Error("Invalid algorithm: "+this._algo)},d.prototype.generateKeys=d.prototype.generateKey,f.prototype.getCurve=function(){return this.curve},f.prototype.getG=function(){return this.g},f.prototype.getN=function(){return this.n},f.prototype.getH=function(){return this.h},v.prototype.deriveSharedSecret=function(e){r.ok(e instanceof g);var t=e._pub.multiply(this._priv);return o.from(t.getX().toBigInteger().toByteArray())}},function(e,t,a){e.exports={read:function(e,t){return p.read(e,t,"pkcs1")},readPkcs1:function(e,t,a){switch(e){case"RSA":if("public"===t)return function(e){var t=m(e,"modulus"),a=m(e,"exponent");return new c({type:"rsa",parts:[{name:"e",data:a},{name:"n",data:t}]})}(a);if("private"===t)return function(e){var t=m(e,"version");r.strictEqual(t[0],0);var a=m(e,"modulus"),i=m(e,"public exponent"),o=m(e,"private exponent"),n=m(e,"prime1"),s=m(e,"prime2"),c=m(e,"exponent1"),p=m(e,"exponent2"),l=m(e,"iqmp");return new u({type:"rsa",parts:[{name:"n",data:a},{name:"e",data:i},{name:"d",data:o},{name:"iqmp",data:l},{name:"p",data:n},{name:"q",data:s},{name:"dmodp",data:c},{name:"dmodq",data:p}]})}(a);throw new Error("Unknown key type: "+t);case"DSA":if("public"===t)return function(e){var t=m(e,"y"),a=m(e,"p"),r=m(e,"q"),i=m(e,"g");return new c({type:"dsa",parts:[{name:"y",data:t},{name:"p",data:a},{name:"q",data:r},{name:"g",data:i}]})}(a);if("private"===t)return function(e){var t=m(e,"version");r.strictEqual(t.readUInt8(0),0);var a=m(e,"p"),i=m(e,"q"),o=m(e,"g"),n=m(e,"y"),s=m(e,"x");return new u({type:"dsa",parts:[{name:"p",data:a},{name:"q",data:i},{name:"g",data:o},{name:"y",data:n},{name:"x",data:s}]})}(a);throw new Error("Unknown key type: "+t);case"EC":case"ECDSA":if("private"===t)return function(e){var t=m(e,"version");r.strictEqual(t.readUInt8(0),1);var a=e.readString(i.Ber.OctetString,!0);e.readSequence(160);var n=l(e);r.string(n,"a known elliptic curve"),e.readSequence(161);var c=e.readString(i.Ber.BitString,!0);c=s.ecNormalize(c);var p={type:"ecdsa",parts:[{name:"curve",data:o.from(n)},{name:"Q",data:c},{name:"d",data:a}]};return new u(p)}(a);if("public"===t)return function(e){e.readSequence();var t=e.readOID();r.strictEqual(t,"1.2.840.10045.2.1","must be ecPublicKey");for(var a,u=e.readOID(),p=Object.keys(n.curves),l=0;l=58)break;i++}return ia?null:r||i==e.length?parseInt(e.substr(0,i),10):null}function w(e){var t=e.split(":"),a=[0,0,0];if(3!==t.length)return null;for(var r=0;r<3;r++){var i=2==r,o=x(t[r],1,2,i);if(null===o)return null;a[r]=o}return a}function j(e){e=String(e).substr(0,3).toLowerCase();var t=v[e];return t>=0?t:null}function _(e){if(e){var t=e.split(g);if(t){for(var a=null,r=null,i=null,o=null,n=null,s=null,c=0;c=70&&s<=99?s+=1900:s>=0&&s<=69&&(s+=2e3)):n=u:o=u}if(!(null===o||null===n||null===s||null===i||o<1||o>31||s<1601||a>23||r>59||i>59))return new Date(Date.UTC(s,n,o,a,r,i))}}}function S(e){var t=e.getUTCDate();t=t>=10?t:"0"+t;var a=e.getUTCHours();a=a>=10?a:"0"+a;var r=e.getUTCMinutes();r=r>=10?r:"0"+r;var i=e.getUTCSeconds();return i=i>=10?i:"0"+i,b[e.getUTCDay()]+", "+t+" "+y[e.getUTCMonth()]+" "+e.getUTCFullYear()+" "+a+":"+r+":"+i+" GMT"}function E(e){return null==e?null:(e=e.trim().replace(/^\./,""),r&&/[^\u0001-\u007f]/.test(e)&&(e=r.toASCII(e)),e.toLowerCase())}function F(e,t,a){if(null==e||null==t)return null;if(!1!==a&&(e=E(e),t=E(t)),e==t)return!0;if(i.isIP(e))return!1;var r=e.indexOf(t);return!(r<=0)&&(e.length===t.length+r&&"."===e.substr(r-1,1))}function P(e){if(!e||"/"!==e.substr(0,1))return"/";if("/"===e)return e;var t=e.lastIndexOf("/");return 0===t?"/":e.slice(0,t)}function z(e,t){var a,r,i=(e=function(e){for(var t=0;t1;){var a=e.lastIndexOf("/");if(0===a)break;e=e.substr(0,a),t.push(e)}return t.push("/"),t},t.canonicalDomain=E},function(e,t,a){"use strict"; /*! * Copyright (c) 2018, Salesforce.com, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * 3. Neither the name of Salesforce.com nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */var r=a(138);t.getPublicSuffix=function(e){return r.get(e)}},function(e,t){e.exports=require("punycode")},function(e,t,a){"use strict"; /*! * Copyright (c) 2015, Salesforce.com, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * 3. Neither the name of Salesforce.com nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */function r(){}t.Store=r,r.prototype.synchronous=!1,r.prototype.findCookie=function(e,t,a,r){throw new Error("findCookie is not implemented")},r.prototype.findCookies=function(e,t,a){throw new Error("findCookies is not implemented")},r.prototype.putCookie=function(e,t){throw new Error("putCookie is not implemented")},r.prototype.updateCookie=function(e,t,a){throw new Error("updateCookie is not implemented")},r.prototype.removeCookie=function(e,t,a,r){throw new Error("removeCookie is not implemented")},r.prototype.removeCookies=function(e,t,a){throw new Error("removeCookies is not implemented")},r.prototype.getAllCookies=function(e){throw new Error("getAllCookies is not implemented (therefore jar cannot be serialized)")}},function(e,t,a){"use strict"; /*! * Copyright (c) 2015, Salesforce.com, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * 3. Neither the name of Salesforce.com nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */var r=a(57);t.permuteDomain=function(e){var t=r.getPublicSuffix(e);if(!t)return null;if(t==e)return[e];for(var a=e.slice(0,-(t.length+1)).split(".").reverse(),i=t,o=[i];a.length;)i=a.shift()+"."+i,o.push(i);return o}},function(e,t,a){"use strict"; /*! * Copyright (c) 2015, Salesforce.com, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * 3. Neither the name of Salesforce.com nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */t.pathMatch=function(e,t){if(t===e)return!0;if(0===e.indexOf(t)){if("/"===t.substr(-1))return!0;if("/"===e.substr(t.length,1))return!0}return!1}},function(e,t){e.exports=require("buffer")},function(e,t,a){e.exports={Verifier:u,Signer:p};var r=a(24),i=a(17),o=a(4),n=a(0),s=a(2).Buffer,c=a(10);function u(e,t){if("sha512"!==t.toLowerCase())throw new Error("ED25519 only supports the use of SHA-512 hashes");this.key=e,this.chunks=[],i.Writable.call(this,{})}function p(e,t){if("sha512"!==t.toLowerCase())throw new Error("ED25519 only supports the use of SHA-512 hashes");this.key=e,this.chunks=[],i.Writable.call(this,{})}o.inherits(u,i.Writable),u.prototype._write=function(e,t,a){this.chunks.push(e),a()},u.prototype.update=function(e){"string"==typeof e&&(e=s.from(e,"binary")),this.chunks.push(e)},u.prototype.verify=function(e,t){var a;if(c.isSignature(e,[2,0])){if("ed25519"!==e.type)return!1;a=e.toBuffer("raw")}else if("string"==typeof e)a=s.from(e,"base64");else if(c.isSignature(e,[1,0]))throw new Error("signature was created by too old a version of sshpk and cannot be verified");return n.buffer(a),r.sign.detached.verify(new Uint8Array(s.concat(this.chunks)),new Uint8Array(a),new Uint8Array(this.key.part.A.data))},o.inherits(p,i.Writable),p.prototype._write=function(e,t,a){this.chunks.push(e),a()},p.prototype.update=function(e){"string"==typeof e&&(e=s.from(e,"binary")),this.chunks.push(e)},p.prototype.sign=function(){var e=r.sign.detached(new Uint8Array(s.concat(this.chunks)),new Uint8Array(s.concat([this.key.part.k.data,this.key.part.A.data]))),t=s.from(e),a=c.parse(t,"ed25519","raw");return a.hashAlgorithm="sha512",a}},function(e,t,a){e.exports={read:function(e,t){if("string"==typeof e){if(e.trim().match(/^[-]+[ ]*BEGIN/))return o.read(e,t);if(e.match(/^\s*ssh-[a-z]/))return n.read(e,t);if(e.match(/^\s*ecdsa-/))return n.read(e,t);if(e.match(/^putty-user-key-file-2:/i))return u.read(e,t);if(l(e))return c.read(e,t);e=i.from(e,"binary")}else{if(r.buffer(e),function(e){var t=0;for(;te.length||"BEGIN"!==e.slice(t,t+5).toString("ascii"))}(e))return o.read(e,t);if(function(e){var t=0;for(;t=t&&(i=0),r=r<<8|e[i];return r}o.prototype.encipher=function(e,t){void 0===t&&(t=new Uint8Array(e.buffer),0!==e.byteOffset&&(t=t.subarray(e.byteOffset))),e[0]^=this.P[0];for(var a=1;a<16;a+=2)e[1]^=n(this.S,t,0)^this.P[a],e[0]^=n(this.S,t,4)^this.P[a+1];var r=e[0];e[0]=e[1]^this.P[17],e[1]=r},o.prototype.decipher=function(e){var t=new Uint8Array(e.buffer);0!==e.byteOffset&&(t=t.subarray(e.byteOffset)),e[0]^=this.P[17];for(var a=16;a>0;a-=2)e[1]^=n(this.S,t,0)^this.P[a],e[0]^=n(this.S,t,4)^this.P[a-1];var r=e[0];e[0]=e[1]^this.P[0],e[1]=r},o.prototype.expand0state=function(e,t){var a,r,o=new Uint32Array(2),n=new Uint8Array(o.buffer);for(a=0,i=0;a<18;a++)this.P[a]^=s(e,t);for(i=0,a=0;a<18;a+=2)this.encipher(o,n),this.P[a]=o[0],this.P[a+1]=o[1];for(a=0;a<4;a++)for(r=0;r<256;r+=2)this.encipher(o,n),this.S[a][r]=o[0],this.S[a][r+1]=o[1]},o.prototype.expandstate=function(e,t,a,r){var o,n,c=new Uint32Array(2);for(o=0,i=0;o<18;o++)this.P[o]^=s(a,r);for(o=0,i=0;o<18;o+=2)c[0]^=s(e,t),c[1]^=s(e,t),this.encipher(c),this.P[o]=c[0],this.P[o+1]=c[1];for(o=0;o<4;o++)for(n=0;n<256;n+=2)c[0]^=s(e,t),c[1]^=s(e,t),this.encipher(c),this.S[o][n]=c[0],this.S[o][n+1]=c[1];i=0},o.prototype.enc=function(e,t){for(var a=0;a>>24,a[4*r+2]=n[r]>>>16,a[4*r+1]=n[r]>>>8,a[4*r+0]=n[r]}e.exports={BLOCKS:c,HASHSIZE:u,hash:p,pbkdf:function(e,t,a,i,o,n,s){var c,l,m,h,d,f,g=new Uint8Array(64),v=new Uint8Array(64),y=new Uint8Array(u),b=new Uint8Array(u),k=new Uint8Array(i+4),x=n;if(s<1)return-1;if(0===t||0===i||0===n||n>y.byteLength*y.byteLength||i>1<<20)return-1;for(h=Math.floor((n+y.byteLength-1)/y.byteLength),m=Math.floor((n+h-1)/h),c=0;c0;f++){for(k[i+0]=f>>>24,k[i+1]=f>>>16,k[i+2]=f>>>8,k[i+3]=f,r(v,k,i+4),p(g,v,b),c=y.byteLength;c--;)y[c]=b[c];for(c=1;c=x);c++)o[d]=y[c];n-=c}return 0}}},function(e,t,a){e.exports={read:function(e,t){"string"!=typeof e&&(r.buffer(e,"buf"),e=e.toString("ascii"));var a=e.trim().replace(/[\\\r]/g,""),n=a.match(s);n||(n=a.match(c));r.ok(n,"key must match regex");var u,p=o.algToKeyType(n[1]),l=i.from(n[2],"base64"),m={};if(n[4])try{u=o.read(l)}catch(e){n=a.match(c),r.ok(n,"key must match regex"),l=i.from(n[2],"base64"),u=o.readInternal(m,"public",l)}else u=o.readInternal(m,"public",l);if(r.strictEqual(p,u.type),n[4]&&n[4].length>0)u.comment=n[4];else if(m.consumed){var h=n[2]+(n[3]?n[3]:""),d=4*Math.ceil(m.consumed/3);h=h.slice(0,d-2).replace(/[^a-zA-Z0-9+\/=]/g,"")+h.slice(d-2);var f=m.consumed%3;for(f>0&&"="!==h.slice(d-1,d)&&d--;"="===h.slice(d,d+1);)d++;var g=h.slice(d);(g=g.replace(/[\r\n]/g," ").replace(/^\s+/,"")).match(/^[a-zA-Z0-9]/)&&(u.comment=g)}return u},write:function(e,t){if(r.object(e),!n.isKey(e))throw new Error("Must be a public key");var a=[],s=o.keyTypeToAlg(e);a.push(s);var c=o.write(e);a.push(c.toString("base64")),e.comment&&a.push(e.comment);return i.from(a.join(" "))}};var r=a(0),i=a(2).Buffer,o=a(15),n=(a(6),a(5)),s=(a(7),a(32),/^([a-z0-9-]+)[ \t]+([a-zA-Z0-9+\/]+[=]*)([ \t]+([^ \t][^\n]*[\n]*)?)?$/),c=/^([a-z0-9-]+)[ \t\n]+([a-zA-Z0-9+\/][a-zA-Z0-9+\/ \t\n=]*)([^a-zA-Z0-9+\/ \t\n=].*)?$/},function(e,t,a){e.exports={read:function(e,t){var a,n=e.toString("ascii").split(/[\r\n]+/),c=!1,u=0;for(;un.length)throw new Error("Invalid public-lines count");var h=i.from(n.slice(u,u+m).join(""),"base64"),d=o.algToKeyType(p),f=o.read(h);if(f.type!==d)throw new Error("Outer key algorithm mismatch");return f.comment=l,f},write:function(e,t){if(r.object(e),!n.isKey(e))throw new Error("Must be a public key");var a=o.keyTypeToAlg(e),s=o.write(e),c=e.comment||"",u=function(e,t){var a=[],r=0;for(;r1)throw new Error("DER sequence does not contain whole byte stream");var m=a.offset;a.readSequence();var d=a.offset+a.length,g=d;if(a.peek()===l(0)){a.readSequence(l(0));var v=a.readInt();r.ok(v<=3,"only x.509 versions up to v3 supported")}var y={signatures:{}},b=y.signatures.x509={};b.extras={},y.serial=function(e,t){return r.strictEqual(e.peek(),i.Ber.Integer,t+" is not an Integer"),n.mpNormalize(e.readString(i.Ber.Integer,!0))}(a,"serial"),a.readSequence();var k=a.offset+a.length,w=a.readOID();if(void 0===h[w])throw new Error("unknown signature algorithm "+w);a._offset=k,y.issuer=s.parseAsn1(a),a.readSequence(),y.validFrom=f(a),y.validUntil=f(a),y.subjects=[s.parseAsn1(a)],a.readSequence(),k=a.offset+a.length,y.subjectKey=p.readPkcs8(void 0,"public",a),a._offset=k,a.peek()===l(1)&&(a.readSequence(l(1)),b.extras.issuerUniqueID=e.slice(a.offset,a.offset+a.length),a._offset+=a.length);a.peek()===l(2)&&(a.readSequence(l(2)),b.extras.subjectUniqueID=e.slice(a.offset,a.offset+a.length),a._offset+=a.length);if(a.peek()===l(3)){a.readSequence(l(3));var j=a.offset+a.length;for(a.readSequence();a.offset=60?o-1:o;a.setUTCFullYear(n,parseInt(t[2],10)-1,parseInt(t[3],10)),a.setUTCHours(parseInt(t[4],10),parseInt(t[5],10)),t[6]&&t[6].length>0&&a.setUTCSeconds(parseInt(t[6],10));return a}(e.readString(i.Ber.UTCTime));if(e.peek()===i.Ber.GeneralizedTime)return function(e){var t=e.match(j);r.ok(t);var a=new Date;a.setUTCFullYear(parseInt(t[1],10),parseInt(t[2],10)-1,parseInt(t[3],10)),a.setUTCHours(parseInt(t[4],10),parseInt(t[5],10)),t[6]&&t[6].length>0&&a.setUTCSeconds(parseInt(t[6],10));return a}(e.readString(i.Ber.GeneralizedTime));throw new Error("Unsupported date format")}function g(e,t){var a,r;t.getUTCFullYear()>=2050||t.getUTCFullYear()<1950?e.writeString((r="",r+=_((a=t).getUTCFullYear(),4),r+=_(a.getUTCMonth()+1),r+=_(a.getUTCDate()),r+=_(a.getUTCHours()),r+=_(a.getUTCMinutes()),r+=_(a.getUTCSeconds()),r+="Z"),i.Ber.GeneralizedTime):e.writeString(function(e){var t="";return t+=_(e.getUTCFullYear()%100),t+=_(e.getUTCMonth()+1),t+=_(e.getUTCDate()),t+=_(e.getUTCHours()),t+=_(e.getUTCMinutes()),t+=_(e.getUTCSeconds()),t+="Z"}(t),i.Ber.UTCTime)}var v={OtherName:l(0),RFC822Name:m(1),DNSName:m(2),X400Address:l(3),DirectoryName:l(4),EDIPartyName:l(5),URI:m(6),IPAddress:m(7),OID:m(8)},y={serverAuth:"1.3.6.1.5.5.7.3.1",clientAuth:"1.3.6.1.5.5.7.3.2",codeSigning:"1.3.6.1.5.5.7.3.3",joyentDocker:"1.3.6.1.4.1.38678.1.4.1",joyentCmon:"1.3.6.1.4.1.38678.1.4.2"},b={};Object.keys(y).forEach(function(e){b[y[e]]=e});var k=["signature","identity","keyEncryption","encryption","keyAgreement","ca","crl"];function x(e,t,a){a.readSequence();var r,o,n=a.offset+a.length,c=a.readOID(),u=e.signatures.x509;switch(u.extras.exts||(u.extras.exts=[]),a.peek()===i.Ber.Boolean&&(o=a.readBoolean()),c){case d.basicConstraints:a.readSequence(i.Ber.OctetString),a.readSequence();var p=a.offset+a.length,l=!1;a.peek()===i.Ber.Boolean&&(l=a.readBoolean()),void 0===e.purposes&&(e.purposes=[]),!0===l&&e.purposes.push("ca");var m={oid:c,critical:o};a.offset0||"host"===o.type||void 0!==e.purposes&&e.purposes.length>0||a.extras&&a.extras.exts){t.startSequence(l(3)),t.startSequence();var c=[];void 0!==e.purposes&&e.purposes.length>0&&(c.push({oid:d.basicConstraints,critical:!0}),c.push({oid:d.keyUsage,critical:!0}),c.push({oid:d.extKeyUsage,critical:!0})),c.push({oid:d.altName}),a.extras&&a.extras.exts&&(c=a.extras.exts);for(var u=0;u0)throw new Error("non-zero precision not supported");switch(t.match(/-/)&&(u=!0),t.match(/0/)&&(p="0"),t.match(/\+/)&&(l=!0),n){case"s":if(null==m)throw new Error("argument "+y+": attempted to print undefined or null as a string");v+=s(p,a,u,m.toString());break;case"d":m=Math.floor(m);case"f":v+=(l=l&&m>0?"+":"")+s(p,a,u,m.toString());break;case"x":v+=s(p,a,u,m.toString(16));break;case"j":0===a&&(a=10),v+=i.inspect(m,!1,a);break;case"r":v+=c(m);break;default:throw new Error("unsupported conversion: "+n)}}else v+="%";return v+=e}function n(e){var t=Array.prototype.slice.call(arguments,1);return e.write(o.apply(this,t))}function s(e,t,a,r){for(var i=r;i.lengthp||u===p&&"application/"===i[c].substr(0,12)))continue}i[c]=e}}})},function(e,t){e.exports=require("path")},function(e,t){e.exports=require("tls")},function(e,t,a){var r=a(4),i=a(17).Stream,o=a(167),n=a(168);function s(){this.writable=!1,this.readable=!0,this.dataSize=0,this.maxDataSize=2097152,this.pauseStreams=!0,this._released=!1,this._streams=[],this._currentStream=null}e.exports=s,r.inherits(s,i),s.create=function(e){var t=new this;for(var a in e=e||{})t[a]=e[a];return t},s.isStreamLike=function(e){return"function"!=typeof e&&"string"!=typeof e&&"boolean"!=typeof e&&"number"!=typeof e&&!Buffer.isBuffer(e)},s.prototype.append=function(e){if(s.isStreamLike(e)){if(!(e instanceof o)){var t=o.create(e,{maxDataSize:1/0,pauseStream:this.pauseStreams});e.on("data",this._checkDataSize.bind(this)),e=t}this._handleErrors(e),this.pauseStreams&&e.pause()}return this._streams.push(e),this},s.prototype.pipe=function(e,t){return i.prototype.pipe.call(this,e,t),this.resume(),e},s.prototype._getNext=function(){this._currentStream=null;var e=this._streams.shift();void 0!==e?"function"==typeof e?e(function(e){s.isStreamLike(e)&&(e.on("data",this._checkDataSize.bind(this)),this._handleErrors(e)),n(this._pipeNext.bind(this,e))}.bind(this)):this._pipeNext(e):this.end()},s.prototype._pipeNext=function(e){if(this._currentStream=e,s.isStreamLike(e))return e.on("end",this._getNext.bind(this)),void e.pipe(this,{end:!1});var t=e;this.write(t),this._getNext()},s.prototype._handleErrors=function(e){var t=this;e.on("error",function(e){t._emitError(e)})},s.prototype.write=function(e){this.emit("data",e)},s.prototype.pause=function(){this.pauseStreams&&(this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.pause&&this._currentStream.pause(),this.emit("pause"))},s.prototype.resume=function(){this._released||(this._released=!0,this.writable=!0,this._getNext()),this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.resume&&this._currentStream.resume(),this.emit("resume")},s.prototype.end=function(){this._reset(),this.emit("end")},s.prototype.destroy=function(){this._reset(),this.emit("close")},s.prototype._reset=function(){this.writable=!1,this._streams=[],this._currentStream=null},s.prototype._checkDataSize=function(){if(this._updateDataSize(),!(this.dataSize<=this.maxDataSize)){var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this._emitError(new Error(e))}},s.prototype._updateDataSize=function(){this.dataSize=0;var e=this;this._streams.forEach(function(t){t.dataSize&&(e.dataSize+=t.dataSize)}),this._currentStream&&this._currentStream.dataSize&&(this.dataSize+=this._currentStream.dataSize)},s.prototype._emitError=function(e){this._reset(),this.emit("error",e)}},function(e,t){e.exports=require("fs")},function(e,t,a){var r=a(76),i=a(77);e.exports=function(e,t,a,o){var n=a.keyedList?a.keyedList[a.index]:a.index;a.jobs[n]=function(e,t,a,i){var o;o=2==e.length?e(a,r(i)):e(a,t,r(i));return o}(t,n,e[n],function(e,t){n in a.jobs&&(delete a.jobs[n],e?i(a):a.results[n]=t,o(e,a.results))})}},function(e,t,a){var r=a(171);e.exports=function(e){var t=!1;return r(function(){t=!0}),function(a,i){t?e(a,i):r(function(){e(a,i)})}}},function(e,t){e.exports=function(e){Object.keys(e.jobs).forEach(function(e){"function"==typeof this.jobs[e]&&this.jobs[e]()}.bind(e)),e.jobs={}}},function(e,t){e.exports=function(e,t){var a=!Array.isArray(e),r={index:0,keyedList:a||t?Object.keys(e):null,jobs:{},results:a?{}:[],size:a?Object.keys(e).length:e.length};t&&r.keyedList.sort(a?t:function(a,r){return t(e[a],e[r])});return r}},function(e,t,a){var r=a(77),i=a(76);e.exports=function(e){if(!Object.keys(this.jobs).length)return;this.index=this.size,r(this),i(e)(null,this.results)}},function(e,t,a){var r=a(75),i=a(78),o=a(79);function n(e,t){return et?1:0}e.exports=function(e,t,a,n){var s=i(e,a);return r(e,t,s,function a(i,o){i?n(i,o):(s.index++,s.index<(s.keyedList||e).length?r(e,t,s,a):n(null,s.results))}),o.bind(s,n)},e.exports.ascending=n,e.exports.descending=function(e,t){return-1*n(e,t)}},function(e,t,a){var r=a(17);function i(e){return e instanceof r.Stream}function o(e){return i(e)&&"function"==typeof e._read&&"object"==typeof e._readableState}function n(e){return i(e)&&"function"==typeof e._write&&"object"==typeof e._writableState}e.exports=i,e.exports.isReadable=o,e.exports.isWritable=n,e.exports.isDuplex=function(e){return o(e)&&n(e)}},function(e,t,a){"use strict";var r=a(177),i=a(178),o=a(84);e.exports={formats:o,parse:i,stringify:r}},function(e,t,a){"use strict";var r=Object.prototype.hasOwnProperty,i=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),o=function(e,t){for(var a=t&&t.plainObjects?Object.create(null):{},r=0;r=48&&o<=57||o>=65&&o<=90||o>=97&&o<=122?a+=t.charAt(r):o<128?a+=i[o]:o<2048?a+=i[192|o>>6]+i[128|63&o]:o<55296||o>=57344?a+=i[224|o>>12]+i[128|o>>6&63]+i[128|63&o]:(r+=1,o=65536+((1023&o)<<10|1023&t.charCodeAt(r)),a+=i[240|o>>18]+i[128|o>>12&63]+i[128|o>>6&63]+i[128|63&o])}return a},isBuffer:function(e){return null!=e&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},merge:function e(t,a,i){if(!a)return t;if("object"!=typeof a){if(Array.isArray(t))t.push(a);else{if("object"!=typeof t)return[t,a];(i.plainObjects||i.allowPrototypes||!r.call(Object.prototype,a))&&(t[a]=!0)}return t}if("object"!=typeof t)return[t].concat(a);var n=t;return Array.isArray(t)&&!Array.isArray(a)&&(n=o(t,i)),Array.isArray(t)&&Array.isArray(a)?(a.forEach(function(a,o){r.call(t,o)?t[o]&&"object"==typeof t[o]?t[o]=e(t[o],a,i):t.push(a):t[o]=a}),t):Object.keys(a).reduce(function(t,o){var n=a[o];return r.call(t,o)?t[o]=e(t[o],n,i):t[o]=n,t},n)}}},function(e,t,a){"use strict";var r=String.prototype.replace,i=/%20/g;e.exports={default:"RFC3986",formatters:{RFC1738:function(e){return r.call(e,i,"+")},RFC3986:function(e){return e}},RFC1738:"RFC1738",RFC3986:"RFC3986"}},function(e,t,a){"use strict";var r=a(18);e.exports=function(e){r.copy(e,this)}},function(e,t,a){"use strict";e.exports=function(e,t){t||(t={}),"function"==typeof t&&(t={cmp:t});var a,r="boolean"==typeof t.cycles&&t.cycles,i=t.cmp&&(a=t.cmp,function(e){return function(t,r){var i={key:t,value:e[t]},o={key:r,value:e[r]};return a(i,o)}}),o=[];return function e(t){if(t&&t.toJSON&&"function"==typeof t.toJSON&&(t=t.toJSON()),void 0!==t){if("number"==typeof t)return isFinite(t)?""+t:"null";if("object"!=typeof t)return JSON.stringify(t);var a,n;if(Array.isArray(t)){for(n="[",a=0;a",y=h?">":"<",b=void 0;if(g){var k=e.util.getData(f.$data,n,e.dataPathArr),x="exclusive"+o,w="exclType"+o,j="exclIsNumber"+o,_="' + "+(F="op"+o)+" + '";i+=" var schemaExcl"+o+" = "+k+"; ",i+=" var "+x+"; var "+w+" = typeof "+(k="schemaExcl"+o)+"; if ("+w+" != 'boolean' && "+w+" != 'undefined' && "+w+" != 'number') { ";var S;b=d;(S=S||[]).push(i),i="",!1!==e.createErrors?(i+=" { keyword: '"+(b||"_exclusiveLimit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: {} ",!1!==e.opts.messages&&(i+=" , message: '"+d+" should be boolean' "),e.opts.verbose&&(i+=" , schema: validate.schema"+c+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),i+=" } "):i+=" {} ";var E=i;i=S.pop(),!e.compositeRule&&p?e.async?i+=" throw new ValidationError(["+E+"]); ":i+=" validate.errors = ["+E+"]; return false; ":i+=" var err = "+E+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+=" } else if ( ",m&&(i+=" ("+r+" !== undefined && typeof "+r+" != 'number') || "),i+=" "+w+" == 'number' ? ( ("+x+" = "+r+" === undefined || "+k+" "+v+"= "+r+") ? "+l+" "+y+"= "+k+" : "+l+" "+y+" "+r+" ) : ( ("+x+" = "+k+" === true) ? "+l+" "+y+"= "+r+" : "+l+" "+y+" "+r+" ) || "+l+" !== "+l+") { var op"+o+" = "+x+" ? '"+v+"' : '"+v+"='; ",void 0===s&&(b=d,u=e.errSchemaPath+"/"+d,r=k,m=g)}else{_=v;if((j="number"==typeof f)&&m){var F="'"+_+"'";i+=" if ( ",m&&(i+=" ("+r+" !== undefined && typeof "+r+" != 'number') || "),i+=" ( "+r+" === undefined || "+f+" "+v+"= "+r+" ? "+l+" "+y+"= "+f+" : "+l+" "+y+" "+r+" ) || "+l+" !== "+l+") { "}else{j&&void 0===s?(x=!0,b=d,u=e.errSchemaPath+"/"+d,r=f,y+="="):(j&&(r=Math[h?"min":"max"](f,s)),f===(!j||r)?(x=!0,b=d,u=e.errSchemaPath+"/"+d,y+="="):(x=!1,_+="="));F="'"+_+"'";i+=" if ( ",m&&(i+=" ("+r+" !== undefined && typeof "+r+" != 'number') || "),i+=" "+l+" "+y+" "+r+" || "+l+" !== "+l+") { "}}b=b||t,(S=S||[]).push(i),i="",!1!==e.createErrors?(i+=" { keyword: '"+(b||"_limit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: { comparison: "+F+", limit: "+r+", exclusive: "+x+" } ",!1!==e.opts.messages&&(i+=" , message: 'should be "+_+" ",i+=m?"' + "+r:r+"'"),e.opts.verbose&&(i+=" , schema: ",i+=m?"validate.schema"+c:""+s,i+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),i+=" } "):i+=" {} ";E=i;return i=S.pop(),!e.compositeRule&&p?e.async?i+=" throw new ValidationError(["+E+"]); ":i+=" validate.errors = ["+E+"]; return false; ":i+=" var err = "+E+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+=" } ",p&&(i+=" else { "),i}},function(e,t,a){"use strict";e.exports=function(e,t,a){var r,i=" ",o=e.level,n=e.dataLevel,s=e.schema[t],c=e.schemaPath+e.util.getProperty(t),u=e.errSchemaPath+"/"+t,p=!e.opts.allErrors,l="data"+(n||""),m=e.opts.$data&&s&&s.$data;m?(i+=" var schema"+o+" = "+e.util.getData(s.$data,n,e.dataPathArr)+"; ",r="schema"+o):r=s,i+="if ( ",m&&(i+=" ("+r+" !== undefined && typeof "+r+" != 'number') || "),i+=" "+l+".length "+("maxItems"==t?">":"<")+" "+r+") { ";var h=t,d=d||[];d.push(i),i="",!1!==e.createErrors?(i+=" { keyword: '"+(h||"_limitItems")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: { limit: "+r+" } ",!1!==e.opts.messages&&(i+=" , message: 'should NOT have ",i+="maxItems"==t?"more":"fewer",i+=" than ",i+=m?"' + "+r+" + '":""+s,i+=" items' "),e.opts.verbose&&(i+=" , schema: ",i+=m?"validate.schema"+c:""+s,i+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),i+=" } "):i+=" {} ";var f=i;return i=d.pop(),!e.compositeRule&&p?e.async?i+=" throw new ValidationError(["+f+"]); ":i+=" validate.errors = ["+f+"]; return false; ":i+=" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+="} ",p&&(i+=" else { "),i}},function(e,t,a){"use strict";e.exports=function(e,t,a){var r,i=" ",o=e.level,n=e.dataLevel,s=e.schema[t],c=e.schemaPath+e.util.getProperty(t),u=e.errSchemaPath+"/"+t,p=!e.opts.allErrors,l="data"+(n||""),m=e.opts.$data&&s&&s.$data;m?(i+=" var schema"+o+" = "+e.util.getData(s.$data,n,e.dataPathArr)+"; ",r="schema"+o):r=s;var h="maxLength"==t?">":"<";i+="if ( ",m&&(i+=" ("+r+" !== undefined && typeof "+r+" != 'number') || "),!1===e.opts.unicode?i+=" "+l+".length ":i+=" ucs2length("+l+") ",i+=" "+h+" "+r+") { ";var d=t,f=f||[];f.push(i),i="",!1!==e.createErrors?(i+=" { keyword: '"+(d||"_limitLength")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: { limit: "+r+" } ",!1!==e.opts.messages&&(i+=" , message: 'should NOT be ",i+="maxLength"==t?"longer":"shorter",i+=" than ",i+=m?"' + "+r+" + '":""+s,i+=" characters' "),e.opts.verbose&&(i+=" , schema: ",i+=m?"validate.schema"+c:""+s,i+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),i+=" } "):i+=" {} ";var g=i;return i=f.pop(),!e.compositeRule&&p?e.async?i+=" throw new ValidationError(["+g+"]); ":i+=" validate.errors = ["+g+"]; return false; ":i+=" var err = "+g+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+="} ",p&&(i+=" else { "),i}},function(e,t,a){"use strict";e.exports=function(e,t,a){var r,i=" ",o=e.level,n=e.dataLevel,s=e.schema[t],c=e.schemaPath+e.util.getProperty(t),u=e.errSchemaPath+"/"+t,p=!e.opts.allErrors,l="data"+(n||""),m=e.opts.$data&&s&&s.$data;m?(i+=" var schema"+o+" = "+e.util.getData(s.$data,n,e.dataPathArr)+"; ",r="schema"+o):r=s,i+="if ( ",m&&(i+=" ("+r+" !== undefined && typeof "+r+" != 'number') || "),i+=" Object.keys("+l+").length "+("maxProperties"==t?">":"<")+" "+r+") { ";var h=t,d=d||[];d.push(i),i="",!1!==e.createErrors?(i+=" { keyword: '"+(h||"_limitProperties")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: { limit: "+r+" } ",!1!==e.opts.messages&&(i+=" , message: 'should NOT have ",i+="maxProperties"==t?"more":"fewer",i+=" than ",i+=m?"' + "+r+" + '":""+s,i+=" properties' "),e.opts.verbose&&(i+=" , schema: ",i+=m?"validate.schema"+c:""+s,i+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),i+=" } "):i+=" {} ";var f=i;return i=d.pop(),!e.compositeRule&&p?e.async?i+=" throw new ValidationError(["+f+"]); ":i+=" validate.errors = ["+f+"]; return false; ":i+=" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+="} ",p&&(i+=" else { "),i}},function(e,t,a){"use strict";const r=a(93),i=a(249),o=a(250);t.handler=async function(e,t,a){try{const{queryStringParameters:{url:t}={}}=e;if(!t)return{statusCode:400,body:"Please provide a valid url in the query string"};const a=t.split("github.com"),n=i("https://api.github.com/repos",a[1]),s=await r({url:n,headers:{"user-agent":"github-actions-things",Authorization:`token ${process.env.GITHUB_TOKEN}`},json:!0}),c=await(async e=>{try{const t=await r({url:i(e,"/topics"),headers:{"user-agent":"github-actions-things",Accept:"application/vnd.github.mercy-preview+json",Authorization:`token ${process.env.GITHUB_TOKEN}`},json:!0}),{names:a=[]}=t||{};return a}catch(e){return console.log(e),Promise.resolve([])}})(n),u=await(async e=>{try{const t=await r({url:i(e,"/readme"),headers:{"user-agent":"github-actions-things",Authorization:`token ${process.env.GITHUB_TOKEN}`},json:!0}),{content:a=""}=t||{};return Buffer.from(a,"base64")}catch(e){return console.log(e),Promise.resolve("")}})(n),{name:p,html_url:l,description:m,homepage:h,language:d,license:f,owner:{login:g}={}}=s;return{statusCode:200,body:await o.default({frontmatter:[{path:`/${p}`,title:p,github_url:t,author:g,subtitle:m,tags:c}],body:u})}}catch(e){return console.log(e),{statusCode:500,body:"Please provide a valid github url"}}}},function(e,t,a){"use strict";(function(e){var t=a(95).getNewLibraryCopy(),r=a(126),i=a(136);try{var o=i(a.c,function(){return a(137)},function(){a(56)},e)}catch(e){var n=a(248).EOL;throw console.error(n+"###"+n+'### The "request" library is not installed automatically anymore.'+n+'### But required by "request-promise".'+n+"###"+n+"### npm install request --save"+n+"###"+n),e}t.config({cancellation:!0}),r({request:o,PromiseImpl:t,expose:["then","catch","finally","cancel","promise"],constructorMixin:function(e,t,a){var r=this;a(function(){r.abort()})}}),o.bindCLS=function(){throw new Error("CLS support was dropped. To get it back read: https://github.com/request/request-promise/wiki/Getting-Back-Support-for-Continuation-Local-Storage")},e.exports=o}).call(this,a(94)(e))},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,a){"use strict";var r;"undefined"!=typeof Promise&&(r=Promise);var i=a(96)();i.noConflict=function(){try{Promise===i&&(Promise=r)}catch(e){}return i},e.exports=i},function(e,t,a){"use strict";e.exports=function(){var t=function(){return new h("circular promise resolution chain\n\n See http://goo.gl/MqrFmX\n")},r=function(){return new P.PromiseInspection(this._target())},i=function(e){return P.reject(new h(e))};function o(){}var n,s={},c=a(1);n=c.isNode?function(){var e=process.domain;return void 0===e&&(e=null),e}:function(){return null},c.notEnumerableProp(P,"_getDomain",n);var u=a(16),p=a(97),l=new p;u.defineProperty(P,"_async",{value:l});var m=a(12),h=P.TypeError=m.TypeError;P.RangeError=m.RangeError;var d=P.CancellationError=m.CancellationError;P.TimeoutError=m.TimeoutError,P.OperationalError=m.OperationalError,P.RejectionError=m.OperationalError,P.AggregateError=m.AggregateError;var f=function(){},g={},v={},y=a(100)(P,f),b=a(101)(P,f,y,i,o),k=a(102)(P),x=k.create,w=a(103)(P,k),j=(w.CapturedTrace,a(104)(P,y,v)),_=a(49)(v),S=a(50),E=c.errorObj,F=c.tryCatch;function P(e){e!==f&&function(e,t){if(null==e||e.constructor!==P)throw new h("the promise constructor cannot be invoked directly\n\n See http://goo.gl/MqrFmX\n");if("function"!=typeof t)throw new h("expecting a function but got "+c.classString(t))}(this,e),this._bitField=0,this._fulfillmentHandler0=void 0,this._rejectionHandler0=void 0,this._promise0=void 0,this._receiver0=void 0,this._resolveFromExecutor(e),this._promiseCreated(),this._fireEvent("promiseCreated",this)}function z(e){this.promise._resolveCallback(e)}function C(e){this.promise._rejectCallback(e,!1)}function A(e){var t=new P(f);t._fulfillmentHandler0=e,t._rejectionHandler0=e,t._promise0=e,t._receiver0=e}return P.prototype.toString=function(){return"[object Promise]"},P.prototype.caught=P.prototype.catch=function(e){var t=arguments.length;if(t>1){var a,r=new Array(t-1),o=0;for(a=0;a0&&"function"!=typeof e&&"function"!=typeof t){var a=".then() only accepts functions but was passed: "+c.classString(e);arguments.length>1&&(a+=", "+c.classString(t)),this._warn(a)}return this._then(e,t,void 0,void 0,void 0)},P.prototype.done=function(e,t){this._then(e,t,void 0,void 0,void 0)._setIsFinal()},P.prototype.spread=function(e){return"function"!=typeof e?i("expecting a function but got "+c.classString(e)):this.all()._then(e,void 0,void 0,g,void 0)},P.prototype.toJSON=function(){var e={isFulfilled:!1,isRejected:!1,fulfillmentValue:void 0,rejectionReason:void 0};return this.isFulfilled()?(e.fulfillmentValue=this.value(),e.isFulfilled=!0):this.isRejected()&&(e.rejectionReason=this.reason(),e.isRejected=!0),e},P.prototype.all=function(){return arguments.length>0&&this._warn(".all() was passed arguments but it does not take any"),new b(this).promise()},P.prototype.error=function(e){return this.caught(c.originatesFromRejection,e)},P.getNewLibraryCopy=e.exports,P.is=function(e){return e instanceof P},P.fromNode=P.fromCallback=function(e){var t=new P(f);t._captureStackTrace();var a=arguments.length>1&&!!Object(arguments[1]).multiArgs,r=F(e)(S(t,a));return r===E&&t._rejectCallback(r.e,!0),t._isFateSealed()||t._setAsyncGuaranteed(),t},P.all=function(e){return new b(e).promise()},P.cast=function(e){var t=y(e);return t instanceof P||((t=new P(f))._captureStackTrace(),t._setFulfilled(),t._rejectionHandler0=e),t},P.resolve=P.fulfilled=P.cast,P.reject=P.rejected=function(e){var t=new P(f);return t._captureStackTrace(),t._rejectCallback(e,!0),t},P.setScheduler=function(e){if("function"!=typeof e)throw new h("expecting a function but got "+c.classString(e));return l.setScheduler(e)},P.prototype._then=function(e,t,a,r,i){var o=void 0!==i,s=o?i:new P(f),u=this._target(),p=u._bitField;o||(s._propagateFrom(this,3),s._captureStackTrace(),void 0===r&&0!=(2097152&this._bitField)&&(r=0!=(50397184&p)?this._boundValue():u===this?void 0:this._boundTo),this._fireEvent("promiseChained",this,s));var m=n();if(0!=(50397184&p)){var h,g,v=u._settlePromiseCtx;0!=(33554432&p)?(g=u._rejectionHandler0,h=e):0!=(16777216&p)?(g=u._fulfillmentHandler0,h=t,u._unsetRejectionIsUnhandled()):(v=u._settlePromiseLateCancellationObserver,g=new d("late cancellation observer"),u._attachExtraTrace(g),h=t),l.invoke(v,u,{handler:null===m?h:"function"==typeof h&&c.domainBind(m,h),promise:s,receiver:r,value:g})}else u._addCallbacks(e,t,s,r,m);return s},P.prototype._length=function(){return 65535&this._bitField},P.prototype._isFateSealed=function(){return 0!=(117506048&this._bitField)},P.prototype._isFollowing=function(){return 67108864==(67108864&this._bitField)},P.prototype._setLength=function(e){this._bitField=-65536&this._bitField|65535&e},P.prototype._setFulfilled=function(){this._bitField=33554432|this._bitField,this._fireEvent("promiseFulfilled",this)},P.prototype._setRejected=function(){this._bitField=16777216|this._bitField,this._fireEvent("promiseRejected",this)},P.prototype._setFollowing=function(){this._bitField=67108864|this._bitField,this._fireEvent("promiseResolved",this)},P.prototype._setIsFinal=function(){this._bitField=4194304|this._bitField},P.prototype._isFinal=function(){return(4194304&this._bitField)>0},P.prototype._unsetCancelled=function(){this._bitField=-65537&this._bitField},P.prototype._setCancelled=function(){this._bitField=65536|this._bitField,this._fireEvent("promiseCancelled",this)},P.prototype._setWillBeCancelled=function(){this._bitField=8388608|this._bitField},P.prototype._setAsyncGuaranteed=function(){l.hasCustomScheduler()||(this._bitField=134217728|this._bitField)},P.prototype._receiverAt=function(e){var t=0===e?this._receiver0:this[4*e-4+3];if(t!==s)return void 0===t&&this._isBound()?this._boundValue():t},P.prototype._promiseAt=function(e){return this[4*e-4+2]},P.prototype._fulfillmentHandlerAt=function(e){return this[4*e-4+0]},P.prototype._rejectionHandlerAt=function(e){return this[4*e-4+1]},P.prototype._boundValue=function(){},P.prototype._migrateCallback0=function(e){e._bitField;var t=e._fulfillmentHandler0,a=e._rejectionHandler0,r=e._promise0,i=e._receiverAt(0);void 0===i&&(i=s),this._addCallbacks(t,a,r,i,null)},P.prototype._migrateCallbackAt=function(e,t){var a=e._fulfillmentHandlerAt(t),r=e._rejectionHandlerAt(t),i=e._promiseAt(t),o=e._receiverAt(t);void 0===o&&(o=s),this._addCallbacks(a,r,i,o,null)},P.prototype._addCallbacks=function(e,t,a,r,i){var o=this._length();if(o>=65531&&(o=0,this._setLength(0)),0===o)this._promise0=a,this._receiver0=r,"function"==typeof e&&(this._fulfillmentHandler0=null===i?e:c.domainBind(i,e)),"function"==typeof t&&(this._rejectionHandler0=null===i?t:c.domainBind(i,t));else{var n=4*o-4;this[n+2]=a,this[n+3]=r,"function"==typeof e&&(this[n+0]=null===i?e:c.domainBind(i,e)),"function"==typeof t&&(this[n+1]=null===i?t:c.domainBind(i,t))}return this._setLength(o+1),o},P.prototype._proxy=function(e,t){this._addCallbacks(void 0,void 0,t,e,null)},P.prototype._resolveCallback=function(e,a){if(0==(117506048&this._bitField)){if(e===this)return this._rejectCallback(t(),!1);var r=y(e,this);if(!(r instanceof P))return this._fulfill(e);a&&this._propagateFrom(r,2);var i=r._target();if(i!==this){var o=i._bitField;if(0==(50397184&o)){var n=this._length();n>0&&i._migrateCallback0(this);for(var s=1;s>>16)){if(e===this){var r=t();return this._attachExtraTrace(r),this._reject(r)}this._setFulfilled(),this._rejectionHandler0=e,(65535&a)>0&&(0!=(134217728&a)?this._settlePromises():l.settlePromises(this),this._dereferenceTrace())}},P.prototype._reject=function(e){var t=this._bitField;if(!((117506048&t)>>>16)){if(this._setRejected(),this._fulfillmentHandler0=e,this._isFinal())return l.fatalError(e,c.isNode);(65535&t)>0?l.settlePromises(this):this._ensurePossibleRejectionHandled()}},P.prototype._fulfillPromises=function(e,t){for(var a=1;a0){if(0!=(16842752&e)){var a=this._fulfillmentHandler0;this._settlePromise0(this._rejectionHandler0,a,e),this._rejectPromises(t,a)}else{var r=this._rejectionHandler0;this._settlePromise0(this._fulfillmentHandler0,r,e),this._fulfillPromises(t,r)}this._setLength(0)}this._clearCancellationData()},P.prototype._settledValue=function(){var e=this._bitField;return 0!=(33554432&e)?this._rejectionHandler0:0!=(16777216&e)?this._fulfillmentHandler0:void 0},P.defer=P.pending=function(){return w.deprecated("Promise.defer","new Promise"),{promise:new P(f),resolve:z,reject:C}},c.notEnumerableProp(P,"_makeSelfResolutionError",t),a(105)(P,f,y,i,w),a(106)(P,f,y,w),a(107)(P,b,i,w),a(108)(P),a(109)(P),a(110)(P,b,y,f,l,n),P.Promise=P,P.version="3.5.3",a(111)(P,b,i,y,f,w),a(112)(P),a(113)(P,i,y,x,f,w),a(114)(P,f,w),a(115)(P,i,f,y,o,w),a(116)(P),a(117)(P,f),a(118)(P,b,y,i),a(119)(P,f,y,i),a(120)(P,b,i,y,f,w),a(121)(P,b,w),a(122)(P,b,i),a(123)(P,f),a(124)(P,f),a(125)(P),c.toFastProperties(P),c.toFastProperties(P.prototype),A({a:1}),A({b:2}),A({c:3}),A(1),A(function(){}),A(void 0),A(!1),A(new P(f)),w.setBounds(p.firstLineError,c.lastLineError),P}},function(e,t,a){"use strict";var r;try{throw new Error}catch(e){r=e}var i=a(98),o=a(99),n=a(1);function s(){this._customScheduler=!1,this._isTickUsed=!1,this._lateQueue=new o(16),this._normalQueue=new o(16),this._haveDrainedQueues=!1,this._trampolineEnabled=!0;var e=this;this.drainQueues=function(){e._drainQueues()},this._schedule=i}function c(e,t,a){this._lateQueue.push(e,t,a),this._queueTick()}function u(e,t,a){this._normalQueue.push(e,t,a),this._queueTick()}function p(e){this._normalQueue._pushOne(e),this._queueTick()}function l(e){for(;e.length()>0;)m(e)}function m(e){var t=e.shift();if("function"!=typeof t)t._settlePromises();else{var a=e.shift(),r=e.shift();t.call(a,r)}}s.prototype.setScheduler=function(e){var t=this._schedule;return this._schedule=e,this._customScheduler=!0,t},s.prototype.hasCustomScheduler=function(){return this._customScheduler},s.prototype.enableTrampoline=function(){this._trampolineEnabled=!0},s.prototype.disableTrampolineIfNecessary=function(){n.hasDevTools&&(this._trampolineEnabled=!1)},s.prototype.haveItemsQueued=function(){return this._isTickUsed||this._haveDrainedQueues},s.prototype.fatalError=function(e,t){t?(process.stderr.write("Fatal "+(e instanceof Error?e.stack:e)+"\n"),process.exit(2)):this.throwLater(e)},s.prototype.throwLater=function(e,t){if(1===arguments.length&&(t=e,e=function(){throw t}),"undefined"!=typeof setTimeout)setTimeout(function(){e(t)},0);else try{this._schedule(function(){e(t)})}catch(e){throw new Error("No async scheduler available\n\n See http://goo.gl/MqrFmX\n")}},n.hasDevTools?(s.prototype.invokeLater=function(e,t,a){this._trampolineEnabled?c.call(this,e,t,a):this._schedule(function(){setTimeout(function(){e.call(t,a)},100)})},s.prototype.invoke=function(e,t,a){this._trampolineEnabled?u.call(this,e,t,a):this._schedule(function(){e.call(t,a)})},s.prototype.settlePromises=function(e){this._trampolineEnabled?p.call(this,e):this._schedule(function(){e._settlePromises()})}):(s.prototype.invokeLater=c,s.prototype.invoke=u,s.prototype.settlePromises=p),s.prototype._drainQueues=function(){l(this._normalQueue),this._reset(),this._haveDrainedQueues=!0,l(this._lateQueue)},s.prototype._queueTick=function(){this._isTickUsed||(this._isTickUsed=!0,this._schedule(this.drainQueues))},s.prototype._reset=function(){this._isTickUsed=!1},e.exports=s,e.exports.firstLineError=r},function(e,t,a){"use strict";var r,i=a(1),o=i.getNativePromise();if(i.isNode&&"undefined"==typeof MutationObserver){var n=global.setImmediate,s=process.nextTick;r=i.isRecentNode?function(e){n.call(global,e)}:function(e){s.call(process,e)}}else if("function"==typeof o&&"function"==typeof o.resolve){var c=o.resolve();r=function(e){c.then(e)}}else r="undefined"==typeof MutationObserver||"undefined"!=typeof window&&window.navigator&&(window.navigator.standalone||window.cordova)?"undefined"!=typeof setImmediate?function(e){setImmediate(e)}:"undefined"!=typeof setTimeout?function(e){setTimeout(e,0)}:function(){throw new Error("No async scheduler available\n\n See http://goo.gl/MqrFmX\n")}:function(){var e=document.createElement("div"),t={attributes:!0},a=!1,r=document.createElement("div");new MutationObserver(function(){e.classList.toggle("foo"),a=!1}).observe(r,t);return function(i){var o=new MutationObserver(function(){o.disconnect(),i()});o.observe(e,t),a||(a=!0,r.classList.toggle("foo"))}}();e.exports=r},function(e,t,a){"use strict";function r(e){this._capacity=e,this._length=0,this._front=0}r.prototype._willBeOverCapacity=function(e){return this._capacity=this._length&&(this._resolve(this._values),!0)},s.prototype._promiseCancelled=function(){return this._cancel(),!0},s.prototype._promiseRejected=function(e){return this._totalResolved++,this._reject(e),!0},s.prototype._resultCancelled=function(){if(!this._isResolved()){var t=this._values;if(this._cancel(),t instanceof e)t.cancel();else for(var a=0;a=0)return a[e]}return e.prototype._promiseCreated=function(){},e.prototype._pushContext=function(){},e.prototype._popContext=function(){return null},e._peekContext=e.prototype._peekContext=function(){},r.prototype._pushContext=function(){void 0!==this._trace&&(this._trace._promiseCreated=null,a.push(this._trace))},r.prototype._popContext=function(){if(void 0!==this._trace){var e=a.pop(),t=e._promiseCreated;return e._promiseCreated=null,t}return null},r.CapturedTrace=null,r.create=function(){if(t)return new r},r.deactivateLongStackTraces=function(){},r.activateLongStackTraces=function(){var a=e.prototype._pushContext,o=e.prototype._popContext,n=e._peekContext,s=e.prototype._peekContext,c=e.prototype._promiseCreated;r.deactivateLongStackTraces=function(){e.prototype._pushContext=a,e.prototype._popContext=o,e._peekContext=n,e.prototype._peekContext=s,e.prototype._promiseCreated=c,t=!1},t=!0,e.prototype._pushContext=r.prototype._pushContext,e.prototype._popContext=r.prototype._popContext,e._peekContext=e.prototype._peekContext=i,e.prototype._promiseCreated=function(){var e=this._peekContext();e&&null==e._promiseCreated&&(e._promiseCreated=this)}},r}},function(e,t,a){"use strict";e.exports=function(e,t){var r,i,o,n=e._getDomain,s=e._async,c=a(12).Warning,u=a(1),p=a(16),l=u.canAttachTrace,m=/[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/,h=/\((?:timers\.js):\d+:\d+\)/,d=/[\/<\(](.+?):(\d+):(\d+)\)?\s*$/,f=null,g=null,v=!1,y=!(0==u.env("BLUEBIRD_DEBUG")||!u.env("BLUEBIRD_DEBUG")&&"development"!==u.env("NODE_ENV")),b=!(0==u.env("BLUEBIRD_WARNINGS")||!y&&!u.env("BLUEBIRD_WARNINGS")),k=!(0==u.env("BLUEBIRD_LONG_STACK_TRACES")||!y&&!u.env("BLUEBIRD_LONG_STACK_TRACES")),x=0!=u.env("BLUEBIRD_W_FORGOTTEN_RETURN")&&(b||!!u.env("BLUEBIRD_W_FORGOTTEN_RETURN"));e.prototype.suppressUnhandledRejections=function(){var e=this._target();e._bitField=-1048577&e._bitField|524288},e.prototype._ensurePossibleRejectionHandled=function(){if(0==(524288&this._bitField)){this._setRejectionIsUnhandled();var e=this;setTimeout(function(){e._notifyUnhandledRejection()},1)}},e.prototype._notifyUnhandledRejectionIsHandled=function(){M("rejectionHandled",r,void 0,this)},e.prototype._setReturnedNonUndefined=function(){this._bitField=268435456|this._bitField},e.prototype._returnedNonUndefined=function(){return 0!=(268435456&this._bitField)},e.prototype._notifyUnhandledRejection=function(){if(this._isRejectionUnhandled()){var e=this._settledValue();this._setUnhandledRejectionIsNotified(),M("unhandledRejection",i,e,this)}},e.prototype._setUnhandledRejectionIsNotified=function(){this._bitField=262144|this._bitField},e.prototype._unsetUnhandledRejectionIsNotified=function(){this._bitField=-262145&this._bitField},e.prototype._isUnhandledRejectionNotified=function(){return(262144&this._bitField)>0},e.prototype._setRejectionIsUnhandled=function(){this._bitField=1048576|this._bitField},e.prototype._unsetRejectionIsUnhandled=function(){this._bitField=-1048577&this._bitField,this._isUnhandledRejectionNotified()&&(this._unsetUnhandledRejectionIsNotified(),this._notifyUnhandledRejectionIsHandled())},e.prototype._isRejectionUnhandled=function(){return(1048576&this._bitField)>0},e.prototype._warn=function(e,t,a){return L(e,t,a||this)},e.onPossiblyUnhandledRejection=function(e){var t=n();i="function"==typeof e?null===t?e:u.domainBind(t,e):void 0},e.onUnhandledRejectionHandled=function(e){var t=n();r="function"==typeof e?null===t?e:u.domainBind(t,e):void 0};var w=function(){};e.longStackTraces=function(){if(s.haveItemsQueued()&&!J.longStackTraces)throw new Error("cannot enable long stack traces after promises have been created\n\n See http://goo.gl/MqrFmX\n");if(!J.longStackTraces&&V()){var a=e.prototype._captureStackTrace,r=e.prototype._attachExtraTrace,i=e.prototype._dereferenceTrace;J.longStackTraces=!0,w=function(){if(s.haveItemsQueued()&&!J.longStackTraces)throw new Error("cannot enable long stack traces after promises have been created\n\n See http://goo.gl/MqrFmX\n");e.prototype._captureStackTrace=a,e.prototype._attachExtraTrace=r,e.prototype._dereferenceTrace=i,t.deactivateLongStackTraces(),s.enableTrampoline(),J.longStackTraces=!1},e.prototype._captureStackTrace=I,e.prototype._attachExtraTrace=R,e.prototype._dereferenceTrace=N,t.activateLongStackTraces(),s.disableTrampolineIfNecessary()}},e.hasLongStackTraces=function(){return J.longStackTraces&&V()};var j=function(){try{if("function"==typeof CustomEvent){var e=new CustomEvent("CustomEvent");return u.global.dispatchEvent(e),function(e,t){var a={detail:t,cancelable:!0};p.defineProperty(a,"promise",{value:t.promise}),p.defineProperty(a,"reason",{value:t.reason});var r=new CustomEvent(e.toLowerCase(),a);return!u.global.dispatchEvent(r)}}if("function"==typeof Event){e=new Event("CustomEvent");return u.global.dispatchEvent(e),function(e,t){var a=new Event(e.toLowerCase(),{cancelable:!0});return a.detail=t,p.defineProperty(a,"promise",{value:t.promise}),p.defineProperty(a,"reason",{value:t.reason}),!u.global.dispatchEvent(a)}}return(e=document.createEvent("CustomEvent")).initCustomEvent("testingtheevent",!1,!0,{}),u.global.dispatchEvent(e),function(e,t){var a=document.createEvent("CustomEvent");return a.initCustomEvent(e.toLowerCase(),!1,!0,t),!u.global.dispatchEvent(a)}}catch(e){}return function(){return!1}}(),_=u.isNode?function(){return process.emit.apply(process,arguments)}:u.global?function(e){var t="on"+e.toLowerCase(),a=u.global[t];return!!a&&(a.apply(u.global,[].slice.call(arguments,1)),!0)}:function(){return!1};function S(e,t){return{promise:t}}var E={promiseCreated:S,promiseFulfilled:S,promiseRejected:S,promiseResolved:S,promiseCancelled:S,promiseChained:function(e,t,a){return{promise:t,child:a}},warning:function(e,t){return{warning:t}},unhandledRejection:function(e,t,a){return{reason:t,promise:a}},rejectionHandled:S},F=function(e){var t=!1;try{t=_.apply(null,arguments)}catch(e){s.throwLater(e),t=!0}var a=!1;try{a=j(e,E[e].apply(null,arguments))}catch(e){s.throwLater(e),a=!0}return a||t};function P(){return!1}function z(e,t,a){var r=this;try{e(t,a,function(e){if("function"!=typeof e)throw new TypeError("onCancel must be a function, got: "+u.toString(e));r._attachCancellationCallback(e)})}catch(e){return e}}function C(e){if(!this._isCancellable())return this;var t=this._onCancel();void 0!==t?u.isArray(t)?t.push(e):this._setOnCancel([t,e]):this._setOnCancel(e)}function A(){return this._onCancelField}function O(e){this._onCancelField=e}function q(){this._cancellationParent=void 0,this._onCancelField=void 0}function T(e,t){if(0!=(1&t)){this._cancellationParent=e;var a=e._branchesRemainingToCancel;void 0===a&&(a=0),e._branchesRemainingToCancel=a+1}0!=(2&t)&&e._isBound()&&this._setBoundTo(e._boundTo)}e.config=function(t){if("longStackTraces"in(t=Object(t))&&(t.longStackTraces?e.longStackTraces():!t.longStackTraces&&e.hasLongStackTraces()&&w()),"warnings"in t){var a=t.warnings;J.warnings=!!a,x=J.warnings,u.isObject(a)&&"wForgottenReturn"in a&&(x=!!a.wForgottenReturn)}if("cancellation"in t&&t.cancellation&&!J.cancellation){if(s.haveItemsQueued())throw new Error("cannot enable cancellation after promises are in use");e.prototype._clearCancellationData=q,e.prototype._propagateFrom=T,e.prototype._onCancel=A,e.prototype._setOnCancel=O,e.prototype._attachCancellationCallback=C,e.prototype._execute=z,B=T,J.cancellation=!0}return"monitoring"in t&&(t.monitoring&&!J.monitoring?(J.monitoring=!0,e.prototype._fireEvent=F):!t.monitoring&&J.monitoring&&(J.monitoring=!1,e.prototype._fireEvent=P)),e},e.prototype._fireEvent=P,e.prototype._execute=function(e,t,a){try{e(t,a)}catch(e){return e}},e.prototype._onCancel=function(){},e.prototype._setOnCancel=function(e){},e.prototype._attachCancellationCallback=function(e){},e.prototype._captureStackTrace=function(){},e.prototype._attachExtraTrace=function(){},e.prototype._dereferenceTrace=function(){},e.prototype._clearCancellationData=function(){},e.prototype._propagateFrom=function(e,t){};var B=function(e,t){0!=(2&t)&&e._isBound()&&this._setBoundTo(e._boundTo)};function D(){var t=this._boundTo;return void 0!==t&&t instanceof e?t.isFulfilled()?t.value():void 0:t}function I(){this._trace=new Z(this._peekContext())}function R(e,t){if(l(e)){var a=this._trace;if(void 0!==a&&t&&(a=a._parent),void 0!==a)a.attachExtraTrace(e);else if(!e.__stackCleaned__){var r=H(e);u.notEnumerableProp(e,"stack",r.message+"\n"+r.stack.join("\n")),u.notEnumerableProp(e,"__stackCleaned__",!0)}}}function N(){this._trace=void 0}function L(t,a,r){if(J.warnings){var i,o=new c(t);if(a)r._attachExtraTrace(o);else if(J.longStackTraces&&(i=e._peekContext()))i.attachExtraTrace(o);else{var n=H(o);o.stack=n.message+"\n"+n.stack.join("\n")}F("warning",o)||$(o,"",!0)}}function U(e){for(var t=[],a=0;a0?function(e){for(var t=e.stack.replace(/\s+$/g,"").split("\n"),a=0;a0&&"SyntaxError"!=e.name&&(t=t.slice(a)),t}(e):[" (No stack trace)"],{message:a,stack:"SyntaxError"==e.name?t:U(t)}}function $(e,t,a){if("undefined"!=typeof console){var r;if(u.isObject(e)){var i=e.stack;r=t+g(i,e)}else r=t+String(e);"function"==typeof o?o(r,a):"function"!=typeof console.log&&"object"!=typeof console.log||console.log(r)}}function M(e,t,a,r){var i=!1;try{"function"==typeof t&&(i=!0,"rejectionHandled"===e?t(r):t(a,r))}catch(e){s.throwLater(e)}"unhandledRejection"===e?F(e,a,r)||i||$(a,"Unhandled rejection "):F(e,r)}function K(e){var t;if("function"==typeof e)t="[function "+(e.name||"anonymous")+"]";else{t=e&&"function"==typeof e.toString?e.toString():u.toString(e);if(/\[object [a-zA-Z0-9$_]+\]/.test(t))try{t=JSON.stringify(e)}catch(e){}0===t.length&&(t="(empty array)")}return"(<"+function(e){if(e.length<41)return e;return e.substr(0,38)+"..."}(t)+">, no stack trace)"}function V(){return"function"==typeof Y}var Q=function(){return!1},G=/[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/;function W(e){var t=e.match(G);if(t)return{fileName:t[1],line:parseInt(t[2],10)}}function Z(e){this._parent=e,this._promisesCreated=0;var t=this._length=1+(void 0===e?0:e._length);Y(this,Z),t>32&&this.uncycle()}u.inherits(Z,Error),t.CapturedTrace=Z,Z.prototype.uncycle=function(){var e=this._length;if(!(e<2)){for(var t=[],a={},r=0,i=this;void 0!==i;++r)t.push(i),i=i._parent;for(r=(e=this._length=r)-1;r>=0;--r){var o=t[r].stack;void 0===a[o]&&(a[o]=r)}for(r=0;r0&&(t[n-1]._parent=void 0,t[n-1]._length=1),t[r]._parent=void 0,t[r]._length=1;var s=r>0?t[r-1]:this;n=0;--u)t[u]._length=c,c++;return}}}},Z.prototype.attachExtraTrace=function(e){if(!e.__stackCleaned__){this.uncycle();for(var t=H(e),a=t.message,r=[t.stack],i=this;void 0!==i;)r.push(U(i.stack.split("\n"))),i=i._parent;!function(e){for(var t=e[0],a=1;a=0;--s)if(r[s]===o){n=s;break}for(s=n;s>=0;--s){var c=r[s];if(t[i]!==c)break;t.pop(),i--}t=r}}(r),function(e){for(var t=0;t=0)return f=/@/,g=t,v=!0,function(e){e.stack=(new Error).stack};try{throw new Error}catch(e){r="stack"in e}return"stack"in i||!r||"number"!=typeof Error.stackTraceLimit?(g=function(e,t){return"string"==typeof e?e:"object"!=typeof t&&"function"!=typeof t||void 0===t.name||void 0===t.message?K(t):t.toString()},null):(f=e,g=t,function(e){Error.stackTraceLimit+=6;try{throw new Error}catch(t){e.stack=t.stack}Error.stackTraceLimit-=6})}();"undefined"!=typeof console&&void 0!==console.warn&&(o=function(e){console.warn(e)},u.isNode&&process.stderr.isTTY?o=function(e,t){var a=t?"":"";console.warn(a+e+"\n")}:u.isNode||"string"!=typeof(new Error).stack||(o=function(e,t){console.warn("%c"+e,t?"color: darkorange":"color: red")}));var J={warnings:b,longStackTraces:!1,cancellation:!1,monitoring:!1};return k&&e.longStackTraces(),{longStackTraces:function(){return J.longStackTraces},warnings:function(){return J.warnings},cancellation:function(){return J.cancellation},monitoring:function(){return J.monitoring},propagateFromFunction:function(){return B},boundValueFunction:function(){return D},checkForgottenReturns:function(e,t,a,r,i){if(void 0===e&&null!==t&&x){if(void 0!==i&&i._returnedNonUndefined())return;if(0==(65535&r._bitField))return;a&&(a+=" ");var o="",n="";if(t._trace){for(var s=t._trace.stack.split("\n"),c=U(s),u=c.length-1;u>=0;--u){var p=c[u];if(!h.test(p)){var l=p.match(d);l&&(o="at "+l[1]+":"+l[2]+":"+l[3]+" ");break}}if(c.length>0){var m=c[0];for(u=0;u0&&(n="\n"+s[u-1]);break}}}var f="a promise was created in a "+a+"handler "+o+"but was not returned from it, see http://goo.gl/rRqMUw"+n;r._warn(f,!0,t)}},setBounds:function(e,t){if(V()){for(var a,r,i=e.stack.split("\n"),o=t.stack.split("\n"),n=-1,s=-1,c=0;c=s||(Q=function(e){if(m.test(e))return!0;var t=W(e);return!!(t&&t.fileName===a&&n<=t.line&&t.line<=s)})}},warn:L,deprecated:function(e,t){var a=e+" is deprecated and will be removed in a future version.";return t&&(a+=" Use "+t+" instead."),L(a)},CapturedTrace:Z,fireDomEvent:j,fireGlobalEvent:_}}},function(e,t,a){"use strict";e.exports=function(e,t,r){var i=a(1),o=e.CancellationError,n=i.errorObj,s=a(49)(r);function c(e,t,a){this.promise=e,this.type=t,this.handler=a,this.called=!1,this.cancelPromise=null}function u(e){this.finallyHandler=e}function p(e,t){return null!=e.cancelPromise&&(arguments.length>1?e.cancelPromise._reject(t):e.cancelPromise._cancel(),e.cancelPromise=null,!0)}function l(){return h.call(this,this.promise._target()._settledValue())}function m(e){if(!p(this,e))return n.e=e,n}function h(a){var i=this.promise,s=this.handler;if(!this.called){this.called=!0;var c=this.isFinallyHandler()?s.call(i._boundValue()):s.call(i._boundValue(),a);if(c===r)return c;if(void 0!==c){i._setReturnedNonUndefined();var h=t(c,i);if(h instanceof e){if(null!=this.cancelPromise){if(h._isCancelled()){var d=new o("late cancellation observer");return i._attachExtraTrace(d),n.e=d,n}h.isPending()&&h._attachCancellationCallback(new u(this))}return h._then(l,m,void 0,this,void 0)}}}return i.isRejected()?(p(this),n.e=a,n):(p(this),a)}return c.prototype.isFinallyHandler=function(){return 0===this.type},u.prototype._resultCancelled=function(){p(this.finallyHandler)},e.prototype._passThrough=function(e,t,a,r){return"function"!=typeof e?this.then():this._then(a,r,void 0,new c(this,t,e),void 0)},e.prototype.lastly=e.prototype.finally=function(e){return this._passThrough(e,0,h,h)},e.prototype.tap=function(e){return this._passThrough(e,1,h)},e.prototype.tapCatch=function(t){var a=arguments.length;if(1===a)return this._passThrough(t,1,void 0,h);var r,o=new Array(a-1),n=0;for(r=0;r1){o.deprecated("calling Promise.try with more than 1 argument");var u=arguments[1],p=arguments[2];r=n.isArray(u)?s(a).apply(p,u):s(a).call(p,u)}else r=s(a)();var l=c._popContext();return o.checkForgottenReturns(r,l,"Promise.try",c),c._resolveFromSyncValue(r),c},e.prototype._resolveFromSyncValue=function(e){e===n.errorObj?this._rejectCallback(e.e,!1):this._resolveCallback(e,!0)}}},function(e,t,a){"use strict";e.exports=function(e,t,a,r){var i=!1,o=function(e,t){this._reject(t)},n=function(e,t){t.promiseRejectionQueued=!0,t.bindingPromise._then(o,o,null,this,e)},s=function(e,t){0==(50397184&this._bitField)&&this._resolveCallback(t.target)},c=function(e,t){t.promiseRejectionQueued||this._reject(e)};e.prototype.bind=function(o){i||(i=!0,e.prototype._propagateFrom=r.propagateFromFunction(),e.prototype._boundValue=r.boundValueFunction());var u=a(o),p=new e(t);p._propagateFrom(this,1);var l=this._target();if(p._setBoundTo(u),u instanceof e){var m={promiseRejectionQueued:!1,promise:p,target:l,bindingPromise:u};l._then(t,n,void 0,p,m),u._then(s,c,void 0,p,m),p._setOnCancel(u)}else p._resolveCallback(l);return p},e.prototype._setBoundTo=function(e){void 0!==e?(this._bitField=2097152|this._bitField,this._boundTo=e):this._bitField=-2097153&this._bitField},e.prototype._isBound=function(){return 2097152==(2097152&this._bitField)},e.bind=function(t,a){return e.resolve(a).bind(t)}}},function(e,t,a){"use strict";e.exports=function(e,t,r,i){var o=a(1),n=o.tryCatch,s=o.errorObj,c=e._async;e.prototype.break=e.prototype.cancel=function(){if(!i.cancellation())return this._warn("cancellation is disabled");for(var e=this,t=e;e._isCancellable();){if(!e._cancelBy(t)){t._isFollowing()?t._followee().cancel():t._cancelBranched();break}var a=e._cancellationParent;if(null==a||!a._isCancellable()){e._isFollowing()?e._followee().cancel():e._cancelBranched();break}e._isFollowing()&&e._followee().cancel(),e._setWillBeCancelled(),t=e,e=a}},e.prototype._branchHasCancelled=function(){this._branchesRemainingToCancel--},e.prototype._enoughBranchesHaveCancelled=function(){return void 0===this._branchesRemainingToCancel||this._branchesRemainingToCancel<=0},e.prototype._cancelBy=function(e){return e===this?(this._branchesRemainingToCancel=0,this._invokeOnCancel(),!0):(this._branchHasCancelled(),!!this._enoughBranchesHaveCancelled()&&(this._invokeOnCancel(),!0))},e.prototype._cancelBranched=function(){this._enoughBranchesHaveCancelled()&&this._cancel()},e.prototype._cancel=function(){this._isCancellable()&&(this._setCancelled(),c.invoke(this._cancelPromises,this,void 0))},e.prototype._cancelPromises=function(){this._length()>0&&this._settlePromises()},e.prototype._unsetOnCancel=function(){this._onCancelField=void 0},e.prototype._isCancellable=function(){return this.isPending()&&!this._isCancelled()},e.prototype.isCancellable=function(){return this.isPending()&&!this.isCancelled()},e.prototype._doInvokeOnCancel=function(e,t){if(o.isArray(e))for(var a=0;a0&&"function"==typeof arguments[o]&&(a=arguments[o],o<=8&&u)){(w=new e(i))._captureStackTrace();for(var p=new(0,f[o-1])(a),l=g,m=0;m=1?n:0,o).promise()}c.inherits(m,t),m.prototype._asyncInit=function(){this._init$(void 0,-2)},m.prototype._init=function(){},m.prototype._promiseFulfilled=function(t,a){var r=this._values,o=this.length(),s=this._preservedValues,c=this._limit;if(a<0){if(r[a=-1*a-1]=t,c>=1&&(this._inFlight--,this._drainQueue(),this._isResolved()))return!0}else{if(c>=1&&this._inFlight>=c)return r[a]=t,this._queue.push(a),!1;null!==s&&(s[a]=t);var l=this._promise,m=this._callback,h=l._boundValue();l._pushContext();var d=u(m).call(h,t,a,o),f=l._popContext();if(n.checkForgottenReturns(d,f,null!==s?"Promise.filter":"Promise.map",l),d===p)return this._reject(d.e),!0;var g=i(d,this._promise);if(g instanceof e){var v=(g=g._target())._bitField;if(0==(50397184&v))return c>=1&&this._inFlight++,r[a]=g,g._proxy(this,-1*(a+1)),!1;if(0==(33554432&v))return 0!=(16777216&v)?(this._reject(g._reason()),!0):(this._cancel(),!0);d=g._value()}r[a]=d}return++this._totalResolved>=o&&(null!==s?this._filter(r,s):this._resolve(r),!0)},m.prototype._drainQueue=function(){for(var e=this._queue,t=this._limit,a=this._values;e.length>0&&this._inFlight512){for(var i=Object.keys(a),o=0;o<256;++o)delete a[i[o]];a[" size"]=i.length-256}}return r};function m(t,a){var r;if(null!=t&&(r=t[a]),"function"!=typeof r){var i="Object "+n.classString(t)+" has no method '"+n.toString(a)+"'";throw new e.TypeError(i)}return r}function h(e){return m(e,this.pop()).apply(e,this)}function d(e){return e[this]}function f(e){var t=+this;return t<0&&(t=Math.max(0,t+e.length)),e[t]}t=function(e){return l(e,u,i)},r=function(e){return l(e,p,o)},e.prototype.call=function(e){for(var a=arguments.length,r=new Array(Math.max(a-1,0)),i=1;i=n)return s._fulfill();var c=function(e){var t=r(e);return t!==e&&"function"==typeof e._isDisposable&&"function"==typeof e._getDisposer&&e._isDisposable()&&t._setDisposable(e._getDisposer()),t}(t[i++]);if(c instanceof e&&c._isDisposable()){try{c=r(c._getDisposer().tryDispose(a),t.promise)}catch(e){return h(e)}if(c instanceof e)return c._then(o,h,null,null,null)}o()}(),s}function f(e,t,a){this._data=e,this._promise=t,this._context=a}function g(e,t,a){this.constructor$(e,t,a)}function v(e){return f.isDisposer(e)?(this.resources[this.index]._setDisposable(e),e.promise()):e}function y(e){this.length=e,this.promise=null,this[e-1]=null}f.prototype.data=function(){return this._data},f.prototype.promise=function(){return this._promise},f.prototype.resource=function(){return this.promise().isFulfilled()?this.promise().value():m},f.prototype.tryDispose=function(e){var t=this.resource(),a=this._context;void 0!==a&&a._pushContext();var r=t!==m?this.doDispose(t,e):null;return void 0!==a&&a._popContext(),this._promise._unsetDisposable(),this._data=null,r},f.isDisposer=function(e){return null!=e&&"function"==typeof e.resource&&"function"==typeof e.tryDispose},u(g,f),g.prototype.doDispose=function(e,t){return this.data().call(e,e,t)},y.prototype._resultCancelled=function(){for(var t=this.length,a=0;a0},e.prototype._getDisposer=function(){return this._disposer},e.prototype._unsetDisposable=function(){this._bitField=-131073&this._bitField,this._disposer=void 0},e.prototype.disposer=function(e){if("function"==typeof e)return new g(e,this,i());throw new c}}},function(e,t,a){"use strict";e.exports=function(e,t,r){var i=a(1),o=e.TimeoutError;function n(e){this.handle=e}n.prototype._resultCancelled=function(){clearTimeout(this.handle)};var s=function(e){return c(+this).thenReturn(e)},c=e.delay=function(a,i){var o,c;return void 0!==i?(o=e.resolve(i)._then(s,null,null,a,void 0),r.cancellation()&&i instanceof e&&o._setOnCancel(i)):(o=new e(t),c=setTimeout(function(){o._fulfill()},+a),r.cancellation()&&o._setOnCancel(new n(c)),o._captureStackTrace()),o._setAsyncGuaranteed(),o};e.prototype.delay=function(e){return c(e,this)};function u(e){return clearTimeout(this.handle),e}function p(e){throw clearTimeout(this.handle),e}e.prototype.timeout=function(e,t){var a,s;e=+e;var c=new n(setTimeout(function(){a.isPending()&&function(e,t,a){var r;r="string"!=typeof t?t instanceof Error?t:new o("operation timed out"):new o(t),i.markAsOriginatingFromRejection(r),e._attachExtraTrace(r),e._reject(r),null!=a&&a.cancel()}(a,t,s)},e));return r.cancellation()?(s=this.then(),(a=s._then(u,p,void 0,c,void 0))._setOnCancel(c)):a=this._then(u,p,void 0,c,void 0),a}}},function(e,t,a){"use strict";e.exports=function(e,t,r,i,o,n){var s=a(12).TypeError,c=a(1),u=c.errorObj,p=c.tryCatch,l=[];function m(t,a,i,o){if(n.cancellation()){var s=new e(r),c=this._finallyPromise=new e(r);this._promise=s.lastly(function(){return c}),s._captureStackTrace(),s._setOnCancel(this)}else{(this._promise=new e(r))._captureStackTrace()}this._stack=o,this._generatorFunction=t,this._receiver=a,this._generator=void 0,this._yieldHandlers="function"==typeof i?[i].concat(l):l,this._yieldedPromise=null,this._cancellationPhase=!1}c.inherits(m,o),m.prototype._isResolved=function(){return null===this._promise},m.prototype._cleanup=function(){this._promise=this._generator=null,n.cancellation()&&null!==this._finallyPromise&&(this._finallyPromise._fulfill(),this._finallyPromise=null)},m.prototype._promiseCancelled=function(){if(!this._isResolved()){var t;if(void 0!==this._generator.return)this._promise._pushContext(),t=p(this._generator.return).call(this._generator,void 0),this._promise._popContext();else{var a=new e.CancellationError("generator .return() sentinel");e.coroutine.returnSentinel=a,this._promise._attachExtraTrace(a),this._promise._pushContext(),t=p(this._generator.throw).call(this._generator,a),this._promise._popContext()}this._cancellationPhase=!0,this._yieldedPromise=null,this._continue(t)}},m.prototype._promiseFulfilled=function(e){this._yieldedPromise=null,this._promise._pushContext();var t=p(this._generator.next).call(this._generator,e);this._promise._popContext(),this._continue(t)},m.prototype._promiseRejected=function(e){this._yieldedPromise=null,this._promise._attachExtraTrace(e),this._promise._pushContext();var t=p(this._generator.throw).call(this._generator,e);this._promise._popContext(),this._continue(t)},m.prototype._resultCancelled=function(){if(this._yieldedPromise instanceof e){var t=this._yieldedPromise;this._yieldedPromise=null,t.cancel()}},m.prototype.promise=function(){return this._promise},m.prototype._run=function(){this._generator=this._generatorFunction.call(this._receiver),this._receiver=this._generatorFunction=void 0,this._promiseFulfilled(void 0)},m.prototype._continue=function(t){var a=this._promise;if(t===u)return this._cleanup(),this._cancellationPhase?a.cancel():a._rejectCallback(t.e,!1);var r=t.value;if(!0===t.done)return this._cleanup(),this._cancellationPhase?a.cancel():a._resolveCallback(r);var o=i(r,this._promise);if(o instanceof e||null!==(o=function(t,a,r){for(var o=0;o=a;--r)t.push(r);for(r=e+1;r<=3;++r)t.push(r);return t}(h),f="string"==typeof a||c===r;var g="string"==typeof a?"this != null ? this['"+a+"'] : fn":"fn",v="'use strict'; \n var ret = function (Parameters) { \n 'use strict'; \n var len = arguments.length; \n var promise = new Promise(INTERNAL); \n promise._captureStackTrace(); \n var nodeback = nodebackForPromise(promise, "+m+"); \n var ret; \n var callback = tryCatch([GetFunctionCode]); \n switch(len) { \n [CodeForSwitchCase] \n } \n if (ret === errorObj) { \n promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\n } \n if (!promise._isFateSealed()) promise._setAsyncGuaranteed(); \n return promise; \n }; \n notEnumerableProp(ret, '__isPromisified__', true); \n return ret; \n ".replace("[CodeForSwitchCase]",function(){for(var e,t,a,r="",i=0;i0?", ":"",(f?"ret = callback.call(this, {{args}}, nodeback); break;\n":void 0===c?"ret = callback({{args}}, nodeback); break;\n":"ret = callback.call(receiver, {{args}}, nodeback); break;\n").replace("{{args}}",t).replace(", ",a));return r+=" \n default: \n var args = new Array(len + 1); \n var i = 0; \n for (var i = 0; i < len; ++i) { \n args[i] = arguments[i]; \n } \n args[i] = nodeback; \n [CodeForCall] \n break; \n ".replace("[CodeForCall]",f?"ret = callback.apply(this, args);\n":"ret = callback.apply(receiver, args);\n")}()).replace("[GetFunctionCode]",g);return v=v.replace("Parameters",function(e){return i.filledRange(Math.max(e,3),"_arg","")}(h)),new Function("Promise","fn","receiver","withAppended","maybeWrapAsError","nodebackForPromise","tryCatch","errorObj","notEnumerableProp","INTERNAL",v)(e,p,c,n,s,o,i.tryCatch,i.errorObj,i.notEnumerableProp,t)}:function(a,c,u,p,l,m){var h=function(){return this}(),d=a;function f(){var i=c;c===r&&(i=this);var u=new e(t);u._captureStackTrace();var p="string"==typeof d&&this!==h?this[d]:a,l=o(u,m);try{p.apply(i,n(arguments,l))}catch(e){u._rejectCallback(s(e),!0,!0)}return u._isFateSealed()||u._setAsyncGuaranteed(),u}return"string"==typeof d&&(a=p),i.notEnumerableProp(f,"__isPromisified__",!0),f};function k(e,t,a,o,n){for(var s=new RegExp(v(t)+"$"),c=g(e,t,s,a),u=0,p=c.length;u=this._length){var a;if(this._isMap)a=function(e){for(var t=new o,a=e.length/2|0,r=0;r>1},e.prototype.props=function(){return l(this)},e.props=function(e){return l(e)}}},function(e,t,a){"use strict";e.exports=function(e,t,r,i){var o=a(1),n=function(e){return e.then(function(t){return s(t,e)})};function s(a,s){var c=r(a);if(c instanceof e)return n(c);if(null===(a=o.asArray(a)))return i("expecting an array or an iterable object but got "+o.classString(a));var u=new e(t);void 0!==s&&u._propagateFrom(s,3);for(var p=u._fulfill,l=u._reject,m=0,h=a.length;m=this._length&&(this._resolve(this._values),!0)},o.prototype._promiseFulfilled=function(e,t){var a=new i;return a._bitField=33554432,a._settledValueField=e,this._promiseResolved(t,a)},o.prototype._promiseRejected=function(e,t){var a=new i;return a._bitField=16777216,a._settledValueField=e,this._promiseResolved(t,a)},e.settle=function(e){return r.deprecated(".settle()",".reflect()"),new o(e).promise()},e.prototype.settle=function(){return e.settle(this)}}},function(e,t,a){"use strict";e.exports=function(e,t,r){var i=a(1),o=a(12).RangeError,n=a(12).AggregateError,s=i.isArray,c={};function u(e){this.constructor$(e),this._howMany=0,this._unwrap=!1,this._initialized=!1}function p(e,t){if((0|t)!==t||t<0)return r("expecting a positive integer\n\n See http://goo.gl/MqrFmX\n");var a=new u(e),i=a.promise();return a.setHowMany(t),a.init(),i}i.inherits(u,t),u.prototype._init=function(){if(this._initialized)if(0!==this._howMany){this._init$(void 0,-5);var e=s(this._values);!this._isResolved()&&e&&this._howMany>this._canPossiblyFulfill()&&this._reject(this._getRangeError(this.length()))}else this._resolve([])},u.prototype.init=function(){this._initialized=!0,this._init()},u.prototype.setUnwrap=function(){this._unwrap=!0},u.prototype.howMany=function(){return this._howMany},u.prototype.setHowMany=function(e){this._howMany=e},u.prototype._promiseFulfilled=function(e){return this._addFulfilled(e),this._fulfilled()===this.howMany()&&(this._values.length=this.howMany(),1===this.howMany()&&this._unwrap?this._resolve(this._values[0]):this._resolve(this._values),!0)},u.prototype._promiseRejected=function(e){return this._addRejected(e),this._checkOutcome()},u.prototype._promiseCancelled=function(){return this._values instanceof e||null==this._values?this._cancel():(this._addRejected(c),this._checkOutcome())},u.prototype._checkOutcome=function(){if(this.howMany()>this._canPossiblyFulfill()){for(var e=new n,t=this.length();t0?this._reject(e):this._cancel(),!0}return!1},u.prototype._fulfilled=function(){return this._totalResolved},u.prototype._rejected=function(){return this._values.length-this.length()},u.prototype._addRejected=function(e){this._values.push(e)},u.prototype._addFulfilled=function(e){this._values[this._totalResolved++]=e},u.prototype._canPossiblyFulfill=function(){return this.length()-this._rejected()},u.prototype._getRangeError=function(e){var t="Input array must contain at least "+this._howMany+" items but contains only "+e+" items";return new o(t)},u.prototype._resolveEmptyArray=function(){this._reject(this._getRangeError(0))},e.some=function(e,t){return p(e,t)},e.prototype.some=function(e){return p(this,e)},e._SomePromiseArray=u}},function(e,t,a){"use strict";e.exports=function(e,t){var a=e.map;e.prototype.filter=function(e,r){return a(this,e,r,t)},e.filter=function(e,r,i){return a(e,r,i,t)}}},function(e,t,a){"use strict";e.exports=function(e,t){var a=e.reduce,r=e.all;function i(){return r(this)}e.prototype.each=function(e){return a(this,e,t,0)._then(i,void 0,void 0,this,void 0)},e.prototype.mapSeries=function(e){return a(this,e,t,t)},e.each=function(e,r){return a(e,r,t,0)._then(i,void 0,void 0,e,void 0)},e.mapSeries=function(e,r){return a(e,r,t,t)}}},function(e,t,a){"use strict";e.exports=function(e){var t=e._SomePromiseArray;function a(e){var a=new t(e),r=a.promise();return a.setHowMany(1),a.setUnwrap(),a.init(),r}e.any=function(e){return a(e)},e.prototype.any=function(){return a(this)}}},function(e,t,a){"use strict";var r=a(127),i=a(54),o=a(51),n=a(33);e.exports=function(e){var t="Please verify options";if(!n(e))throw new TypeError(t);if(!o(e.request))throw new TypeError(t+".request");if(!i(e.expose)||0===e.expose.length)throw new TypeError(t+".expose");var a=r({PromiseImpl:e.PromiseImpl,constructorMixin:e.constructorMixin}),s=e.request.Request.prototype.init;e.request.Request.prototype.init=function(e){return!n(e)||this._callback||this._rp_promise||a.init.call(this,e),s.apply(this,arguments)};for(var c=!1,u=0;u255)return"DOMAIN_TOO_LONG";for(var a,i=t.split("."),o=0;o63)return"LABEL_TOO_LONG";if("-"===a.charAt(0))return"LABEL_STARTS_WITH_DASH";if("-"===a.charAt(a.length-1))return"LABEL_ENDS_WITH_DASH";if(!/^[a-z0-9\-]+$/.test(a))return"LABEL_INVALID_CHARS"}},t.parse=function(e){if("string"!=typeof e)throw new TypeError("Domain name must be a string.");var a=e.slice(0).toLowerCase();"."===a.charAt(a.length-1)&&(a=a.slice(0,a.length-1));var o=i.validate(a);if(o)return{input:e,error:{message:t.errorCodes[o],code:o}};var n={input:e,tld:null,sld:null,domain:null,subdomain:null,listed:!1},s=a.split(".");if("local"===s[s.length-1])return n;var c=function(){return/xn--/.test(a)?(n.domain&&(n.domain=r.toASCII(n.domain)),n.subdomain&&(n.subdomain=r.toASCII(n.subdomain)),n):n},u=i.findRule(a);if(!u)return s.length<2?n:(n.tld=s.pop(),n.sld=s.pop(),n.domain=[n.sld,n.tld].join("."),s.length&&(n.subdomain=s.pop()),c());n.listed=!0;var p=u.suffix.split("."),l=s.slice(0,s.length-p.length);return u.exception&&l.push(p.shift()),n.tld=p.join("."),l.length?(u.wildcard&&(p.unshift(l.pop()),n.tld=p.join(".")),l.length?(n.sld=l.pop(),n.domain=[n.sld,n.tld].join("."),l.length&&(n.subdomain=l.join(".")),c()):c()):c()},t.get=function(e){return e&&t.parse(e).domain||null},t.isValid=function(e){var a=t.parse(e);return Boolean(a.domain&&a.listed)}},function(e){e.exports=["ac","com.ac","edu.ac","gov.ac","net.ac","mil.ac","org.ac","ad","nom.ad","ae","co.ae","net.ae","org.ae","sch.ae","ac.ae","gov.ae","mil.ae","aero","accident-investigation.aero","accident-prevention.aero","aerobatic.aero","aeroclub.aero","aerodrome.aero","agents.aero","aircraft.aero","airline.aero","airport.aero","air-surveillance.aero","airtraffic.aero","air-traffic-control.aero","ambulance.aero","amusement.aero","association.aero","author.aero","ballooning.aero","broker.aero","caa.aero","cargo.aero","catering.aero","certification.aero","championship.aero","charter.aero","civilaviation.aero","club.aero","conference.aero","consultant.aero","consulting.aero","control.aero","council.aero","crew.aero","design.aero","dgca.aero","educator.aero","emergency.aero","engine.aero","engineer.aero","entertainment.aero","equipment.aero","exchange.aero","express.aero","federation.aero","flight.aero","freight.aero","fuel.aero","gliding.aero","government.aero","groundhandling.aero","group.aero","hanggliding.aero","homebuilt.aero","insurance.aero","journal.aero","journalist.aero","leasing.aero","logistics.aero","magazine.aero","maintenance.aero","media.aero","microlight.aero","modelling.aero","navigation.aero","parachuting.aero","paragliding.aero","passenger-association.aero","pilot.aero","press.aero","production.aero","recreation.aero","repbody.aero","res.aero","research.aero","rotorcraft.aero","safety.aero","scientist.aero","services.aero","show.aero","skydiving.aero","software.aero","student.aero","trader.aero","trading.aero","trainer.aero","union.aero","workinggroup.aero","works.aero","af","gov.af","com.af","org.af","net.af","edu.af","ag","com.ag","org.ag","net.ag","co.ag","nom.ag","ai","off.ai","com.ai","net.ai","org.ai","al","com.al","edu.al","gov.al","mil.al","net.al","org.al","am","ao","ed.ao","gv.ao","og.ao","co.ao","pb.ao","it.ao","aq","ar","com.ar","edu.ar","gob.ar","gov.ar","int.ar","mil.ar","musica.ar","net.ar","org.ar","tur.ar","arpa","e164.arpa","in-addr.arpa","ip6.arpa","iris.arpa","uri.arpa","urn.arpa","as","gov.as","asia","at","ac.at","co.at","gv.at","or.at","au","com.au","net.au","org.au","edu.au","gov.au","asn.au","id.au","info.au","conf.au","oz.au","act.au","nsw.au","nt.au","qld.au","sa.au","tas.au","vic.au","wa.au","act.edu.au","nsw.edu.au","nt.edu.au","qld.edu.au","sa.edu.au","tas.edu.au","vic.edu.au","wa.edu.au","qld.gov.au","sa.gov.au","tas.gov.au","vic.gov.au","wa.gov.au","aw","com.aw","ax","az","com.az","net.az","int.az","gov.az","org.az","edu.az","info.az","pp.az","mil.az","name.az","pro.az","biz.az","ba","com.ba","edu.ba","gov.ba","mil.ba","net.ba","org.ba","bb","biz.bb","co.bb","com.bb","edu.bb","gov.bb","info.bb","net.bb","org.bb","store.bb","tv.bb","*.bd","be","ac.be","bf","gov.bf","bg","a.bg","b.bg","c.bg","d.bg","e.bg","f.bg","g.bg","h.bg","i.bg","j.bg","k.bg","l.bg","m.bg","n.bg","o.bg","p.bg","q.bg","r.bg","s.bg","t.bg","u.bg","v.bg","w.bg","x.bg","y.bg","z.bg","0.bg","1.bg","2.bg","3.bg","4.bg","5.bg","6.bg","7.bg","8.bg","9.bg","bh","com.bh","edu.bh","net.bh","org.bh","gov.bh","bi","co.bi","com.bi","edu.bi","or.bi","org.bi","biz","bj","asso.bj","barreau.bj","gouv.bj","bm","com.bm","edu.bm","gov.bm","net.bm","org.bm","bn","com.bn","edu.bn","gov.bn","net.bn","org.bn","bo","com.bo","edu.bo","gob.bo","int.bo","org.bo","net.bo","mil.bo","tv.bo","web.bo","academia.bo","agro.bo","arte.bo","blog.bo","bolivia.bo","ciencia.bo","cooperativa.bo","democracia.bo","deporte.bo","ecologia.bo","economia.bo","empresa.bo","indigena.bo","industria.bo","info.bo","medicina.bo","movimiento.bo","musica.bo","natural.bo","nombre.bo","noticias.bo","patria.bo","politica.bo","profesional.bo","plurinacional.bo","pueblo.bo","revista.bo","salud.bo","tecnologia.bo","tksat.bo","transporte.bo","wiki.bo","br","9guacu.br","abc.br","adm.br","adv.br","agr.br","aju.br","am.br","anani.br","aparecida.br","arq.br","art.br","ato.br","b.br","barueri.br","belem.br","bhz.br","bio.br","blog.br","bmd.br","boavista.br","bsb.br","campinagrande.br","campinas.br","caxias.br","cim.br","cng.br","cnt.br","com.br","contagem.br","coop.br","cri.br","cuiaba.br","curitiba.br","def.br","ecn.br","eco.br","edu.br","emp.br","eng.br","esp.br","etc.br","eti.br","far.br","feira.br","flog.br","floripa.br","fm.br","fnd.br","fortal.br","fot.br","foz.br","fst.br","g12.br","ggf.br","goiania.br","gov.br","ac.gov.br","al.gov.br","am.gov.br","ap.gov.br","ba.gov.br","ce.gov.br","df.gov.br","es.gov.br","go.gov.br","ma.gov.br","mg.gov.br","ms.gov.br","mt.gov.br","pa.gov.br","pb.gov.br","pe.gov.br","pi.gov.br","pr.gov.br","rj.gov.br","rn.gov.br","ro.gov.br","rr.gov.br","rs.gov.br","sc.gov.br","se.gov.br","sp.gov.br","to.gov.br","gru.br","imb.br","ind.br","inf.br","jab.br","jampa.br","jdf.br","joinville.br","jor.br","jus.br","leg.br","lel.br","londrina.br","macapa.br","maceio.br","manaus.br","maringa.br","mat.br","med.br","mil.br","morena.br","mp.br","mus.br","natal.br","net.br","niteroi.br","*.nom.br","not.br","ntr.br","odo.br","ong.br","org.br","osasco.br","palmas.br","poa.br","ppg.br","pro.br","psc.br","psi.br","pvh.br","qsl.br","radio.br","rec.br","recife.br","ribeirao.br","rio.br","riobranco.br","riopreto.br","salvador.br","sampa.br","santamaria.br","santoandre.br","saobernardo.br","saogonca.br","sjc.br","slg.br","slz.br","sorocaba.br","srv.br","taxi.br","teo.br","the.br","tmp.br","trd.br","tur.br","tv.br","udi.br","vet.br","vix.br","vlog.br","wiki.br","zlg.br","bs","com.bs","net.bs","org.bs","edu.bs","gov.bs","bt","com.bt","edu.bt","gov.bt","net.bt","org.bt","bv","bw","co.bw","org.bw","by","gov.by","mil.by","com.by","of.by","bz","com.bz","net.bz","org.bz","edu.bz","gov.bz","ca","ab.ca","bc.ca","mb.ca","nb.ca","nf.ca","nl.ca","ns.ca","nt.ca","nu.ca","on.ca","pe.ca","qc.ca","sk.ca","yk.ca","gc.ca","cat","cc","cd","gov.cd","cf","cg","ch","ci","org.ci","or.ci","com.ci","co.ci","edu.ci","ed.ci","ac.ci","net.ci","go.ci","asso.ci","aéroport.ci","int.ci","presse.ci","md.ci","gouv.ci","*.ck","!www.ck","cl","gov.cl","gob.cl","co.cl","mil.cl","cm","co.cm","com.cm","gov.cm","net.cm","cn","ac.cn","com.cn","edu.cn","gov.cn","net.cn","org.cn","mil.cn","公司.cn","网络.cn","網絡.cn","ah.cn","bj.cn","cq.cn","fj.cn","gd.cn","gs.cn","gz.cn","gx.cn","ha.cn","hb.cn","he.cn","hi.cn","hl.cn","hn.cn","jl.cn","js.cn","jx.cn","ln.cn","nm.cn","nx.cn","qh.cn","sc.cn","sd.cn","sh.cn","sn.cn","sx.cn","tj.cn","xj.cn","xz.cn","yn.cn","zj.cn","hk.cn","mo.cn","tw.cn","co","arts.co","com.co","edu.co","firm.co","gov.co","info.co","int.co","mil.co","net.co","nom.co","org.co","rec.co","web.co","com","coop","cr","ac.cr","co.cr","ed.cr","fi.cr","go.cr","or.cr","sa.cr","cu","com.cu","edu.cu","org.cu","net.cu","gov.cu","inf.cu","cv","cw","com.cw","edu.cw","net.cw","org.cw","cx","gov.cx","cy","ac.cy","biz.cy","com.cy","ekloges.cy","gov.cy","ltd.cy","name.cy","net.cy","org.cy","parliament.cy","press.cy","pro.cy","tm.cy","cz","de","dj","dk","dm","com.dm","net.dm","org.dm","edu.dm","gov.dm","do","art.do","com.do","edu.do","gob.do","gov.do","mil.do","net.do","org.do","sld.do","web.do","dz","com.dz","org.dz","net.dz","gov.dz","edu.dz","asso.dz","pol.dz","art.dz","ec","com.ec","info.ec","net.ec","fin.ec","k12.ec","med.ec","pro.ec","org.ec","edu.ec","gov.ec","gob.ec","mil.ec","edu","ee","edu.ee","gov.ee","riik.ee","lib.ee","med.ee","com.ee","pri.ee","aip.ee","org.ee","fie.ee","eg","com.eg","edu.eg","eun.eg","gov.eg","mil.eg","name.eg","net.eg","org.eg","sci.eg","*.er","es","com.es","nom.es","org.es","gob.es","edu.es","et","com.et","gov.et","org.et","edu.et","biz.et","name.et","info.et","net.et","eu","fi","aland.fi","*.fj","*.fk","fm","fo","fr","com.fr","asso.fr","nom.fr","prd.fr","presse.fr","tm.fr","aeroport.fr","assedic.fr","avocat.fr","avoues.fr","cci.fr","chambagri.fr","chirurgiens-dentistes.fr","experts-comptables.fr","geometre-expert.fr","gouv.fr","greta.fr","huissier-justice.fr","medecin.fr","notaires.fr","pharmacien.fr","port.fr","veterinaire.fr","ga","gb","gd","ge","com.ge","edu.ge","gov.ge","org.ge","mil.ge","net.ge","pvt.ge","gf","gg","co.gg","net.gg","org.gg","gh","com.gh","edu.gh","gov.gh","org.gh","mil.gh","gi","com.gi","ltd.gi","gov.gi","mod.gi","edu.gi","org.gi","gl","co.gl","com.gl","edu.gl","net.gl","org.gl","gm","gn","ac.gn","com.gn","edu.gn","gov.gn","org.gn","net.gn","gov","gp","com.gp","net.gp","mobi.gp","edu.gp","org.gp","asso.gp","gq","gr","com.gr","edu.gr","net.gr","org.gr","gov.gr","gs","gt","com.gt","edu.gt","gob.gt","ind.gt","mil.gt","net.gt","org.gt","gu","com.gu","edu.gu","gov.gu","guam.gu","info.gu","net.gu","org.gu","web.gu","gw","gy","co.gy","com.gy","edu.gy","gov.gy","net.gy","org.gy","hk","com.hk","edu.hk","gov.hk","idv.hk","net.hk","org.hk","公司.hk","教育.hk","敎育.hk","政府.hk","個人.hk","个人.hk","箇人.hk","網络.hk","网络.hk","组織.hk","網絡.hk","网絡.hk","组织.hk","組織.hk","組织.hk","hm","hn","com.hn","edu.hn","org.hn","net.hn","mil.hn","gob.hn","hr","iz.hr","from.hr","name.hr","com.hr","ht","com.ht","shop.ht","firm.ht","info.ht","adult.ht","net.ht","pro.ht","org.ht","med.ht","art.ht","coop.ht","pol.ht","asso.ht","edu.ht","rel.ht","gouv.ht","perso.ht","hu","co.hu","info.hu","org.hu","priv.hu","sport.hu","tm.hu","2000.hu","agrar.hu","bolt.hu","casino.hu","city.hu","erotica.hu","erotika.hu","film.hu","forum.hu","games.hu","hotel.hu","ingatlan.hu","jogasz.hu","konyvelo.hu","lakas.hu","media.hu","news.hu","reklam.hu","sex.hu","shop.hu","suli.hu","szex.hu","tozsde.hu","utazas.hu","video.hu","id","ac.id","biz.id","co.id","desa.id","go.id","mil.id","my.id","net.id","or.id","ponpes.id","sch.id","web.id","ie","gov.ie","il","ac.il","co.il","gov.il","idf.il","k12.il","muni.il","net.il","org.il","im","ac.im","co.im","com.im","ltd.co.im","net.im","org.im","plc.co.im","tt.im","tv.im","in","co.in","firm.in","net.in","org.in","gen.in","ind.in","nic.in","ac.in","edu.in","res.in","gov.in","mil.in","info","int","eu.int","io","com.io","iq","gov.iq","edu.iq","mil.iq","com.iq","org.iq","net.iq","ir","ac.ir","co.ir","gov.ir","id.ir","net.ir","org.ir","sch.ir","ایران.ir","ايران.ir","is","net.is","com.is","edu.is","gov.is","org.is","int.is","it","gov.it","edu.it","abr.it","abruzzo.it","aosta-valley.it","aostavalley.it","bas.it","basilicata.it","cal.it","calabria.it","cam.it","campania.it","emilia-romagna.it","emiliaromagna.it","emr.it","friuli-v-giulia.it","friuli-ve-giulia.it","friuli-vegiulia.it","friuli-venezia-giulia.it","friuli-veneziagiulia.it","friuli-vgiulia.it","friuliv-giulia.it","friulive-giulia.it","friulivegiulia.it","friulivenezia-giulia.it","friuliveneziagiulia.it","friulivgiulia.it","fvg.it","laz.it","lazio.it","lig.it","liguria.it","lom.it","lombardia.it","lombardy.it","lucania.it","mar.it","marche.it","mol.it","molise.it","piedmont.it","piemonte.it","pmn.it","pug.it","puglia.it","sar.it","sardegna.it","sardinia.it","sic.it","sicilia.it","sicily.it","taa.it","tos.it","toscana.it","trentin-sud-tirol.it","trentin-süd-tirol.it","trentin-sudtirol.it","trentin-südtirol.it","trentin-sued-tirol.it","trentin-suedtirol.it","trentino-a-adige.it","trentino-aadige.it","trentino-alto-adige.it","trentino-altoadige.it","trentino-s-tirol.it","trentino-stirol.it","trentino-sud-tirol.it","trentino-süd-tirol.it","trentino-sudtirol.it","trentino-südtirol.it","trentino-sued-tirol.it","trentino-suedtirol.it","trentino.it","trentinoa-adige.it","trentinoaadige.it","trentinoalto-adige.it","trentinoaltoadige.it","trentinos-tirol.it","trentinostirol.it","trentinosud-tirol.it","trentinosüd-tirol.it","trentinosudtirol.it","trentinosüdtirol.it","trentinosued-tirol.it","trentinosuedtirol.it","trentinsud-tirol.it","trentinsüd-tirol.it","trentinsudtirol.it","trentinsüdtirol.it","trentinsued-tirol.it","trentinsuedtirol.it","tuscany.it","umb.it","umbria.it","val-d-aosta.it","val-daosta.it","vald-aosta.it","valdaosta.it","valle-aosta.it","valle-d-aosta.it","valle-daosta.it","valleaosta.it","valled-aosta.it","valledaosta.it","vallee-aoste.it","vallée-aoste.it","vallee-d-aoste.it","vallée-d-aoste.it","valleeaoste.it","valléeaoste.it","valleedaoste.it","valléedaoste.it","vao.it","vda.it","ven.it","veneto.it","ag.it","agrigento.it","al.it","alessandria.it","alto-adige.it","altoadige.it","an.it","ancona.it","andria-barletta-trani.it","andria-trani-barletta.it","andriabarlettatrani.it","andriatranibarletta.it","ao.it","aosta.it","aoste.it","ap.it","aq.it","aquila.it","ar.it","arezzo.it","ascoli-piceno.it","ascolipiceno.it","asti.it","at.it","av.it","avellino.it","ba.it","balsan-sudtirol.it","balsan-südtirol.it","balsan-suedtirol.it","balsan.it","bari.it","barletta-trani-andria.it","barlettatraniandria.it","belluno.it","benevento.it","bergamo.it","bg.it","bi.it","biella.it","bl.it","bn.it","bo.it","bologna.it","bolzano-altoadige.it","bolzano.it","bozen-sudtirol.it","bozen-südtirol.it","bozen-suedtirol.it","bozen.it","br.it","brescia.it","brindisi.it","bs.it","bt.it","bulsan-sudtirol.it","bulsan-südtirol.it","bulsan-suedtirol.it","bulsan.it","bz.it","ca.it","cagliari.it","caltanissetta.it","campidano-medio.it","campidanomedio.it","campobasso.it","carbonia-iglesias.it","carboniaiglesias.it","carrara-massa.it","carraramassa.it","caserta.it","catania.it","catanzaro.it","cb.it","ce.it","cesena-forli.it","cesena-forlì.it","cesenaforli.it","cesenaforlì.it","ch.it","chieti.it","ci.it","cl.it","cn.it","co.it","como.it","cosenza.it","cr.it","cremona.it","crotone.it","cs.it","ct.it","cuneo.it","cz.it","dell-ogliastra.it","dellogliastra.it","en.it","enna.it","fc.it","fe.it","fermo.it","ferrara.it","fg.it","fi.it","firenze.it","florence.it","fm.it","foggia.it","forli-cesena.it","forlì-cesena.it","forlicesena.it","forlìcesena.it","fr.it","frosinone.it","ge.it","genoa.it","genova.it","go.it","gorizia.it","gr.it","grosseto.it","iglesias-carbonia.it","iglesiascarbonia.it","im.it","imperia.it","is.it","isernia.it","kr.it","la-spezia.it","laquila.it","laspezia.it","latina.it","lc.it","le.it","lecce.it","lecco.it","li.it","livorno.it","lo.it","lodi.it","lt.it","lu.it","lucca.it","macerata.it","mantova.it","massa-carrara.it","massacarrara.it","matera.it","mb.it","mc.it","me.it","medio-campidano.it","mediocampidano.it","messina.it","mi.it","milan.it","milano.it","mn.it","mo.it","modena.it","monza-brianza.it","monza-e-della-brianza.it","monza.it","monzabrianza.it","monzaebrianza.it","monzaedellabrianza.it","ms.it","mt.it","na.it","naples.it","napoli.it","no.it","novara.it","nu.it","nuoro.it","og.it","ogliastra.it","olbia-tempio.it","olbiatempio.it","or.it","oristano.it","ot.it","pa.it","padova.it","padua.it","palermo.it","parma.it","pavia.it","pc.it","pd.it","pe.it","perugia.it","pesaro-urbino.it","pesarourbino.it","pescara.it","pg.it","pi.it","piacenza.it","pisa.it","pistoia.it","pn.it","po.it","pordenone.it","potenza.it","pr.it","prato.it","pt.it","pu.it","pv.it","pz.it","ra.it","ragusa.it","ravenna.it","rc.it","re.it","reggio-calabria.it","reggio-emilia.it","reggiocalabria.it","reggioemilia.it","rg.it","ri.it","rieti.it","rimini.it","rm.it","rn.it","ro.it","roma.it","rome.it","rovigo.it","sa.it","salerno.it","sassari.it","savona.it","si.it","siena.it","siracusa.it","so.it","sondrio.it","sp.it","sr.it","ss.it","suedtirol.it","südtirol.it","sv.it","ta.it","taranto.it","te.it","tempio-olbia.it","tempioolbia.it","teramo.it","terni.it","tn.it","to.it","torino.it","tp.it","tr.it","trani-andria-barletta.it","trani-barletta-andria.it","traniandriabarletta.it","tranibarlettaandria.it","trapani.it","trento.it","treviso.it","trieste.it","ts.it","turin.it","tv.it","ud.it","udine.it","urbino-pesaro.it","urbinopesaro.it","va.it","varese.it","vb.it","vc.it","ve.it","venezia.it","venice.it","verbania.it","vercelli.it","verona.it","vi.it","vibo-valentia.it","vibovalentia.it","vicenza.it","viterbo.it","vr.it","vs.it","vt.it","vv.it","je","co.je","net.je","org.je","*.jm","jo","com.jo","org.jo","net.jo","edu.jo","sch.jo","gov.jo","mil.jo","name.jo","jobs","jp","ac.jp","ad.jp","co.jp","ed.jp","go.jp","gr.jp","lg.jp","ne.jp","or.jp","aichi.jp","akita.jp","aomori.jp","chiba.jp","ehime.jp","fukui.jp","fukuoka.jp","fukushima.jp","gifu.jp","gunma.jp","hiroshima.jp","hokkaido.jp","hyogo.jp","ibaraki.jp","ishikawa.jp","iwate.jp","kagawa.jp","kagoshima.jp","kanagawa.jp","kochi.jp","kumamoto.jp","kyoto.jp","mie.jp","miyagi.jp","miyazaki.jp","nagano.jp","nagasaki.jp","nara.jp","niigata.jp","oita.jp","okayama.jp","okinawa.jp","osaka.jp","saga.jp","saitama.jp","shiga.jp","shimane.jp","shizuoka.jp","tochigi.jp","tokushima.jp","tokyo.jp","tottori.jp","toyama.jp","wakayama.jp","yamagata.jp","yamaguchi.jp","yamanashi.jp","栃木.jp","愛知.jp","愛媛.jp","兵庫.jp","熊本.jp","茨城.jp","北海道.jp","千葉.jp","和歌山.jp","長崎.jp","長野.jp","新潟.jp","青森.jp","静岡.jp","東京.jp","石川.jp","埼玉.jp","三重.jp","京都.jp","佐賀.jp","大分.jp","大阪.jp","奈良.jp","宮城.jp","宮崎.jp","富山.jp","山口.jp","山形.jp","山梨.jp","岩手.jp","岐阜.jp","岡山.jp","島根.jp","広島.jp","徳島.jp","沖縄.jp","滋賀.jp","神奈川.jp","福井.jp","福岡.jp","福島.jp","秋田.jp","群馬.jp","香川.jp","高知.jp","鳥取.jp","鹿児島.jp","*.kawasaki.jp","*.kitakyushu.jp","*.kobe.jp","*.nagoya.jp","*.sapporo.jp","*.sendai.jp","*.yokohama.jp","!city.kawasaki.jp","!city.kitakyushu.jp","!city.kobe.jp","!city.nagoya.jp","!city.sapporo.jp","!city.sendai.jp","!city.yokohama.jp","aisai.aichi.jp","ama.aichi.jp","anjo.aichi.jp","asuke.aichi.jp","chiryu.aichi.jp","chita.aichi.jp","fuso.aichi.jp","gamagori.aichi.jp","handa.aichi.jp","hazu.aichi.jp","hekinan.aichi.jp","higashiura.aichi.jp","ichinomiya.aichi.jp","inazawa.aichi.jp","inuyama.aichi.jp","isshiki.aichi.jp","iwakura.aichi.jp","kanie.aichi.jp","kariya.aichi.jp","kasugai.aichi.jp","kira.aichi.jp","kiyosu.aichi.jp","komaki.aichi.jp","konan.aichi.jp","kota.aichi.jp","mihama.aichi.jp","miyoshi.aichi.jp","nishio.aichi.jp","nisshin.aichi.jp","obu.aichi.jp","oguchi.aichi.jp","oharu.aichi.jp","okazaki.aichi.jp","owariasahi.aichi.jp","seto.aichi.jp","shikatsu.aichi.jp","shinshiro.aichi.jp","shitara.aichi.jp","tahara.aichi.jp","takahama.aichi.jp","tobishima.aichi.jp","toei.aichi.jp","togo.aichi.jp","tokai.aichi.jp","tokoname.aichi.jp","toyoake.aichi.jp","toyohashi.aichi.jp","toyokawa.aichi.jp","toyone.aichi.jp","toyota.aichi.jp","tsushima.aichi.jp","yatomi.aichi.jp","akita.akita.jp","daisen.akita.jp","fujisato.akita.jp","gojome.akita.jp","hachirogata.akita.jp","happou.akita.jp","higashinaruse.akita.jp","honjo.akita.jp","honjyo.akita.jp","ikawa.akita.jp","kamikoani.akita.jp","kamioka.akita.jp","katagami.akita.jp","kazuno.akita.jp","kitaakita.akita.jp","kosaka.akita.jp","kyowa.akita.jp","misato.akita.jp","mitane.akita.jp","moriyoshi.akita.jp","nikaho.akita.jp","noshiro.akita.jp","odate.akita.jp","oga.akita.jp","ogata.akita.jp","semboku.akita.jp","yokote.akita.jp","yurihonjo.akita.jp","aomori.aomori.jp","gonohe.aomori.jp","hachinohe.aomori.jp","hashikami.aomori.jp","hiranai.aomori.jp","hirosaki.aomori.jp","itayanagi.aomori.jp","kuroishi.aomori.jp","misawa.aomori.jp","mutsu.aomori.jp","nakadomari.aomori.jp","noheji.aomori.jp","oirase.aomori.jp","owani.aomori.jp","rokunohe.aomori.jp","sannohe.aomori.jp","shichinohe.aomori.jp","shingo.aomori.jp","takko.aomori.jp","towada.aomori.jp","tsugaru.aomori.jp","tsuruta.aomori.jp","abiko.chiba.jp","asahi.chiba.jp","chonan.chiba.jp","chosei.chiba.jp","choshi.chiba.jp","chuo.chiba.jp","funabashi.chiba.jp","futtsu.chiba.jp","hanamigawa.chiba.jp","ichihara.chiba.jp","ichikawa.chiba.jp","ichinomiya.chiba.jp","inzai.chiba.jp","isumi.chiba.jp","kamagaya.chiba.jp","kamogawa.chiba.jp","kashiwa.chiba.jp","katori.chiba.jp","katsuura.chiba.jp","kimitsu.chiba.jp","kisarazu.chiba.jp","kozaki.chiba.jp","kujukuri.chiba.jp","kyonan.chiba.jp","matsudo.chiba.jp","midori.chiba.jp","mihama.chiba.jp","minamiboso.chiba.jp","mobara.chiba.jp","mutsuzawa.chiba.jp","nagara.chiba.jp","nagareyama.chiba.jp","narashino.chiba.jp","narita.chiba.jp","noda.chiba.jp","oamishirasato.chiba.jp","omigawa.chiba.jp","onjuku.chiba.jp","otaki.chiba.jp","sakae.chiba.jp","sakura.chiba.jp","shimofusa.chiba.jp","shirako.chiba.jp","shiroi.chiba.jp","shisui.chiba.jp","sodegaura.chiba.jp","sosa.chiba.jp","tako.chiba.jp","tateyama.chiba.jp","togane.chiba.jp","tohnosho.chiba.jp","tomisato.chiba.jp","urayasu.chiba.jp","yachimata.chiba.jp","yachiyo.chiba.jp","yokaichiba.chiba.jp","yokoshibahikari.chiba.jp","yotsukaido.chiba.jp","ainan.ehime.jp","honai.ehime.jp","ikata.ehime.jp","imabari.ehime.jp","iyo.ehime.jp","kamijima.ehime.jp","kihoku.ehime.jp","kumakogen.ehime.jp","masaki.ehime.jp","matsuno.ehime.jp","matsuyama.ehime.jp","namikata.ehime.jp","niihama.ehime.jp","ozu.ehime.jp","saijo.ehime.jp","seiyo.ehime.jp","shikokuchuo.ehime.jp","tobe.ehime.jp","toon.ehime.jp","uchiko.ehime.jp","uwajima.ehime.jp","yawatahama.ehime.jp","echizen.fukui.jp","eiheiji.fukui.jp","fukui.fukui.jp","ikeda.fukui.jp","katsuyama.fukui.jp","mihama.fukui.jp","minamiechizen.fukui.jp","obama.fukui.jp","ohi.fukui.jp","ono.fukui.jp","sabae.fukui.jp","sakai.fukui.jp","takahama.fukui.jp","tsuruga.fukui.jp","wakasa.fukui.jp","ashiya.fukuoka.jp","buzen.fukuoka.jp","chikugo.fukuoka.jp","chikuho.fukuoka.jp","chikujo.fukuoka.jp","chikushino.fukuoka.jp","chikuzen.fukuoka.jp","chuo.fukuoka.jp","dazaifu.fukuoka.jp","fukuchi.fukuoka.jp","hakata.fukuoka.jp","higashi.fukuoka.jp","hirokawa.fukuoka.jp","hisayama.fukuoka.jp","iizuka.fukuoka.jp","inatsuki.fukuoka.jp","kaho.fukuoka.jp","kasuga.fukuoka.jp","kasuya.fukuoka.jp","kawara.fukuoka.jp","keisen.fukuoka.jp","koga.fukuoka.jp","kurate.fukuoka.jp","kurogi.fukuoka.jp","kurume.fukuoka.jp","minami.fukuoka.jp","miyako.fukuoka.jp","miyama.fukuoka.jp","miyawaka.fukuoka.jp","mizumaki.fukuoka.jp","munakata.fukuoka.jp","nakagawa.fukuoka.jp","nakama.fukuoka.jp","nishi.fukuoka.jp","nogata.fukuoka.jp","ogori.fukuoka.jp","okagaki.fukuoka.jp","okawa.fukuoka.jp","oki.fukuoka.jp","omuta.fukuoka.jp","onga.fukuoka.jp","onojo.fukuoka.jp","oto.fukuoka.jp","saigawa.fukuoka.jp","sasaguri.fukuoka.jp","shingu.fukuoka.jp","shinyoshitomi.fukuoka.jp","shonai.fukuoka.jp","soeda.fukuoka.jp","sue.fukuoka.jp","tachiarai.fukuoka.jp","tagawa.fukuoka.jp","takata.fukuoka.jp","toho.fukuoka.jp","toyotsu.fukuoka.jp","tsuiki.fukuoka.jp","ukiha.fukuoka.jp","umi.fukuoka.jp","usui.fukuoka.jp","yamada.fukuoka.jp","yame.fukuoka.jp","yanagawa.fukuoka.jp","yukuhashi.fukuoka.jp","aizubange.fukushima.jp","aizumisato.fukushima.jp","aizuwakamatsu.fukushima.jp","asakawa.fukushima.jp","bandai.fukushima.jp","date.fukushima.jp","fukushima.fukushima.jp","furudono.fukushima.jp","futaba.fukushima.jp","hanawa.fukushima.jp","higashi.fukushima.jp","hirata.fukushima.jp","hirono.fukushima.jp","iitate.fukushima.jp","inawashiro.fukushima.jp","ishikawa.fukushima.jp","iwaki.fukushima.jp","izumizaki.fukushima.jp","kagamiishi.fukushima.jp","kaneyama.fukushima.jp","kawamata.fukushima.jp","kitakata.fukushima.jp","kitashiobara.fukushima.jp","koori.fukushima.jp","koriyama.fukushima.jp","kunimi.fukushima.jp","miharu.fukushima.jp","mishima.fukushima.jp","namie.fukushima.jp","nango.fukushima.jp","nishiaizu.fukushima.jp","nishigo.fukushima.jp","okuma.fukushima.jp","omotego.fukushima.jp","ono.fukushima.jp","otama.fukushima.jp","samegawa.fukushima.jp","shimogo.fukushima.jp","shirakawa.fukushima.jp","showa.fukushima.jp","soma.fukushima.jp","sukagawa.fukushima.jp","taishin.fukushima.jp","tamakawa.fukushima.jp","tanagura.fukushima.jp","tenei.fukushima.jp","yabuki.fukushima.jp","yamato.fukushima.jp","yamatsuri.fukushima.jp","yanaizu.fukushima.jp","yugawa.fukushima.jp","anpachi.gifu.jp","ena.gifu.jp","gifu.gifu.jp","ginan.gifu.jp","godo.gifu.jp","gujo.gifu.jp","hashima.gifu.jp","hichiso.gifu.jp","hida.gifu.jp","higashishirakawa.gifu.jp","ibigawa.gifu.jp","ikeda.gifu.jp","kakamigahara.gifu.jp","kani.gifu.jp","kasahara.gifu.jp","kasamatsu.gifu.jp","kawaue.gifu.jp","kitagata.gifu.jp","mino.gifu.jp","minokamo.gifu.jp","mitake.gifu.jp","mizunami.gifu.jp","motosu.gifu.jp","nakatsugawa.gifu.jp","ogaki.gifu.jp","sakahogi.gifu.jp","seki.gifu.jp","sekigahara.gifu.jp","shirakawa.gifu.jp","tajimi.gifu.jp","takayama.gifu.jp","tarui.gifu.jp","toki.gifu.jp","tomika.gifu.jp","wanouchi.gifu.jp","yamagata.gifu.jp","yaotsu.gifu.jp","yoro.gifu.jp","annaka.gunma.jp","chiyoda.gunma.jp","fujioka.gunma.jp","higashiagatsuma.gunma.jp","isesaki.gunma.jp","itakura.gunma.jp","kanna.gunma.jp","kanra.gunma.jp","katashina.gunma.jp","kawaba.gunma.jp","kiryu.gunma.jp","kusatsu.gunma.jp","maebashi.gunma.jp","meiwa.gunma.jp","midori.gunma.jp","minakami.gunma.jp","naganohara.gunma.jp","nakanojo.gunma.jp","nanmoku.gunma.jp","numata.gunma.jp","oizumi.gunma.jp","ora.gunma.jp","ota.gunma.jp","shibukawa.gunma.jp","shimonita.gunma.jp","shinto.gunma.jp","showa.gunma.jp","takasaki.gunma.jp","takayama.gunma.jp","tamamura.gunma.jp","tatebayashi.gunma.jp","tomioka.gunma.jp","tsukiyono.gunma.jp","tsumagoi.gunma.jp","ueno.gunma.jp","yoshioka.gunma.jp","asaminami.hiroshima.jp","daiwa.hiroshima.jp","etajima.hiroshima.jp","fuchu.hiroshima.jp","fukuyama.hiroshima.jp","hatsukaichi.hiroshima.jp","higashihiroshima.hiroshima.jp","hongo.hiroshima.jp","jinsekikogen.hiroshima.jp","kaita.hiroshima.jp","kui.hiroshima.jp","kumano.hiroshima.jp","kure.hiroshima.jp","mihara.hiroshima.jp","miyoshi.hiroshima.jp","naka.hiroshima.jp","onomichi.hiroshima.jp","osakikamijima.hiroshima.jp","otake.hiroshima.jp","saka.hiroshima.jp","sera.hiroshima.jp","seranishi.hiroshima.jp","shinichi.hiroshima.jp","shobara.hiroshima.jp","takehara.hiroshima.jp","abashiri.hokkaido.jp","abira.hokkaido.jp","aibetsu.hokkaido.jp","akabira.hokkaido.jp","akkeshi.hokkaido.jp","asahikawa.hokkaido.jp","ashibetsu.hokkaido.jp","ashoro.hokkaido.jp","assabu.hokkaido.jp","atsuma.hokkaido.jp","bibai.hokkaido.jp","biei.hokkaido.jp","bifuka.hokkaido.jp","bihoro.hokkaido.jp","biratori.hokkaido.jp","chippubetsu.hokkaido.jp","chitose.hokkaido.jp","date.hokkaido.jp","ebetsu.hokkaido.jp","embetsu.hokkaido.jp","eniwa.hokkaido.jp","erimo.hokkaido.jp","esan.hokkaido.jp","esashi.hokkaido.jp","fukagawa.hokkaido.jp","fukushima.hokkaido.jp","furano.hokkaido.jp","furubira.hokkaido.jp","haboro.hokkaido.jp","hakodate.hokkaido.jp","hamatonbetsu.hokkaido.jp","hidaka.hokkaido.jp","higashikagura.hokkaido.jp","higashikawa.hokkaido.jp","hiroo.hokkaido.jp","hokuryu.hokkaido.jp","hokuto.hokkaido.jp","honbetsu.hokkaido.jp","horokanai.hokkaido.jp","horonobe.hokkaido.jp","ikeda.hokkaido.jp","imakane.hokkaido.jp","ishikari.hokkaido.jp","iwamizawa.hokkaido.jp","iwanai.hokkaido.jp","kamifurano.hokkaido.jp","kamikawa.hokkaido.jp","kamishihoro.hokkaido.jp","kamisunagawa.hokkaido.jp","kamoenai.hokkaido.jp","kayabe.hokkaido.jp","kembuchi.hokkaido.jp","kikonai.hokkaido.jp","kimobetsu.hokkaido.jp","kitahiroshima.hokkaido.jp","kitami.hokkaido.jp","kiyosato.hokkaido.jp","koshimizu.hokkaido.jp","kunneppu.hokkaido.jp","kuriyama.hokkaido.jp","kuromatsunai.hokkaido.jp","kushiro.hokkaido.jp","kutchan.hokkaido.jp","kyowa.hokkaido.jp","mashike.hokkaido.jp","matsumae.hokkaido.jp","mikasa.hokkaido.jp","minamifurano.hokkaido.jp","mombetsu.hokkaido.jp","moseushi.hokkaido.jp","mukawa.hokkaido.jp","muroran.hokkaido.jp","naie.hokkaido.jp","nakagawa.hokkaido.jp","nakasatsunai.hokkaido.jp","nakatombetsu.hokkaido.jp","nanae.hokkaido.jp","nanporo.hokkaido.jp","nayoro.hokkaido.jp","nemuro.hokkaido.jp","niikappu.hokkaido.jp","niki.hokkaido.jp","nishiokoppe.hokkaido.jp","noboribetsu.hokkaido.jp","numata.hokkaido.jp","obihiro.hokkaido.jp","obira.hokkaido.jp","oketo.hokkaido.jp","okoppe.hokkaido.jp","otaru.hokkaido.jp","otobe.hokkaido.jp","otofuke.hokkaido.jp","otoineppu.hokkaido.jp","oumu.hokkaido.jp","ozora.hokkaido.jp","pippu.hokkaido.jp","rankoshi.hokkaido.jp","rebun.hokkaido.jp","rikubetsu.hokkaido.jp","rishiri.hokkaido.jp","rishirifuji.hokkaido.jp","saroma.hokkaido.jp","sarufutsu.hokkaido.jp","shakotan.hokkaido.jp","shari.hokkaido.jp","shibecha.hokkaido.jp","shibetsu.hokkaido.jp","shikabe.hokkaido.jp","shikaoi.hokkaido.jp","shimamaki.hokkaido.jp","shimizu.hokkaido.jp","shimokawa.hokkaido.jp","shinshinotsu.hokkaido.jp","shintoku.hokkaido.jp","shiranuka.hokkaido.jp","shiraoi.hokkaido.jp","shiriuchi.hokkaido.jp","sobetsu.hokkaido.jp","sunagawa.hokkaido.jp","taiki.hokkaido.jp","takasu.hokkaido.jp","takikawa.hokkaido.jp","takinoue.hokkaido.jp","teshikaga.hokkaido.jp","tobetsu.hokkaido.jp","tohma.hokkaido.jp","tomakomai.hokkaido.jp","tomari.hokkaido.jp","toya.hokkaido.jp","toyako.hokkaido.jp","toyotomi.hokkaido.jp","toyoura.hokkaido.jp","tsubetsu.hokkaido.jp","tsukigata.hokkaido.jp","urakawa.hokkaido.jp","urausu.hokkaido.jp","uryu.hokkaido.jp","utashinai.hokkaido.jp","wakkanai.hokkaido.jp","wassamu.hokkaido.jp","yakumo.hokkaido.jp","yoichi.hokkaido.jp","aioi.hyogo.jp","akashi.hyogo.jp","ako.hyogo.jp","amagasaki.hyogo.jp","aogaki.hyogo.jp","asago.hyogo.jp","ashiya.hyogo.jp","awaji.hyogo.jp","fukusaki.hyogo.jp","goshiki.hyogo.jp","harima.hyogo.jp","himeji.hyogo.jp","ichikawa.hyogo.jp","inagawa.hyogo.jp","itami.hyogo.jp","kakogawa.hyogo.jp","kamigori.hyogo.jp","kamikawa.hyogo.jp","kasai.hyogo.jp","kasuga.hyogo.jp","kawanishi.hyogo.jp","miki.hyogo.jp","minamiawaji.hyogo.jp","nishinomiya.hyogo.jp","nishiwaki.hyogo.jp","ono.hyogo.jp","sanda.hyogo.jp","sannan.hyogo.jp","sasayama.hyogo.jp","sayo.hyogo.jp","shingu.hyogo.jp","shinonsen.hyogo.jp","shiso.hyogo.jp","sumoto.hyogo.jp","taishi.hyogo.jp","taka.hyogo.jp","takarazuka.hyogo.jp","takasago.hyogo.jp","takino.hyogo.jp","tamba.hyogo.jp","tatsuno.hyogo.jp","toyooka.hyogo.jp","yabu.hyogo.jp","yashiro.hyogo.jp","yoka.hyogo.jp","yokawa.hyogo.jp","ami.ibaraki.jp","asahi.ibaraki.jp","bando.ibaraki.jp","chikusei.ibaraki.jp","daigo.ibaraki.jp","fujishiro.ibaraki.jp","hitachi.ibaraki.jp","hitachinaka.ibaraki.jp","hitachiomiya.ibaraki.jp","hitachiota.ibaraki.jp","ibaraki.ibaraki.jp","ina.ibaraki.jp","inashiki.ibaraki.jp","itako.ibaraki.jp","iwama.ibaraki.jp","joso.ibaraki.jp","kamisu.ibaraki.jp","kasama.ibaraki.jp","kashima.ibaraki.jp","kasumigaura.ibaraki.jp","koga.ibaraki.jp","miho.ibaraki.jp","mito.ibaraki.jp","moriya.ibaraki.jp","naka.ibaraki.jp","namegata.ibaraki.jp","oarai.ibaraki.jp","ogawa.ibaraki.jp","omitama.ibaraki.jp","ryugasaki.ibaraki.jp","sakai.ibaraki.jp","sakuragawa.ibaraki.jp","shimodate.ibaraki.jp","shimotsuma.ibaraki.jp","shirosato.ibaraki.jp","sowa.ibaraki.jp","suifu.ibaraki.jp","takahagi.ibaraki.jp","tamatsukuri.ibaraki.jp","tokai.ibaraki.jp","tomobe.ibaraki.jp","tone.ibaraki.jp","toride.ibaraki.jp","tsuchiura.ibaraki.jp","tsukuba.ibaraki.jp","uchihara.ibaraki.jp","ushiku.ibaraki.jp","yachiyo.ibaraki.jp","yamagata.ibaraki.jp","yawara.ibaraki.jp","yuki.ibaraki.jp","anamizu.ishikawa.jp","hakui.ishikawa.jp","hakusan.ishikawa.jp","kaga.ishikawa.jp","kahoku.ishikawa.jp","kanazawa.ishikawa.jp","kawakita.ishikawa.jp","komatsu.ishikawa.jp","nakanoto.ishikawa.jp","nanao.ishikawa.jp","nomi.ishikawa.jp","nonoichi.ishikawa.jp","noto.ishikawa.jp","shika.ishikawa.jp","suzu.ishikawa.jp","tsubata.ishikawa.jp","tsurugi.ishikawa.jp","uchinada.ishikawa.jp","wajima.ishikawa.jp","fudai.iwate.jp","fujisawa.iwate.jp","hanamaki.iwate.jp","hiraizumi.iwate.jp","hirono.iwate.jp","ichinohe.iwate.jp","ichinoseki.iwate.jp","iwaizumi.iwate.jp","iwate.iwate.jp","joboji.iwate.jp","kamaishi.iwate.jp","kanegasaki.iwate.jp","karumai.iwate.jp","kawai.iwate.jp","kitakami.iwate.jp","kuji.iwate.jp","kunohe.iwate.jp","kuzumaki.iwate.jp","miyako.iwate.jp","mizusawa.iwate.jp","morioka.iwate.jp","ninohe.iwate.jp","noda.iwate.jp","ofunato.iwate.jp","oshu.iwate.jp","otsuchi.iwate.jp","rikuzentakata.iwate.jp","shiwa.iwate.jp","shizukuishi.iwate.jp","sumita.iwate.jp","tanohata.iwate.jp","tono.iwate.jp","yahaba.iwate.jp","yamada.iwate.jp","ayagawa.kagawa.jp","higashikagawa.kagawa.jp","kanonji.kagawa.jp","kotohira.kagawa.jp","manno.kagawa.jp","marugame.kagawa.jp","mitoyo.kagawa.jp","naoshima.kagawa.jp","sanuki.kagawa.jp","tadotsu.kagawa.jp","takamatsu.kagawa.jp","tonosho.kagawa.jp","uchinomi.kagawa.jp","utazu.kagawa.jp","zentsuji.kagawa.jp","akune.kagoshima.jp","amami.kagoshima.jp","hioki.kagoshima.jp","isa.kagoshima.jp","isen.kagoshima.jp","izumi.kagoshima.jp","kagoshima.kagoshima.jp","kanoya.kagoshima.jp","kawanabe.kagoshima.jp","kinko.kagoshima.jp","kouyama.kagoshima.jp","makurazaki.kagoshima.jp","matsumoto.kagoshima.jp","minamitane.kagoshima.jp","nakatane.kagoshima.jp","nishinoomote.kagoshima.jp","satsumasendai.kagoshima.jp","soo.kagoshima.jp","tarumizu.kagoshima.jp","yusui.kagoshima.jp","aikawa.kanagawa.jp","atsugi.kanagawa.jp","ayase.kanagawa.jp","chigasaki.kanagawa.jp","ebina.kanagawa.jp","fujisawa.kanagawa.jp","hadano.kanagawa.jp","hakone.kanagawa.jp","hiratsuka.kanagawa.jp","isehara.kanagawa.jp","kaisei.kanagawa.jp","kamakura.kanagawa.jp","kiyokawa.kanagawa.jp","matsuda.kanagawa.jp","minamiashigara.kanagawa.jp","miura.kanagawa.jp","nakai.kanagawa.jp","ninomiya.kanagawa.jp","odawara.kanagawa.jp","oi.kanagawa.jp","oiso.kanagawa.jp","sagamihara.kanagawa.jp","samukawa.kanagawa.jp","tsukui.kanagawa.jp","yamakita.kanagawa.jp","yamato.kanagawa.jp","yokosuka.kanagawa.jp","yugawara.kanagawa.jp","zama.kanagawa.jp","zushi.kanagawa.jp","aki.kochi.jp","geisei.kochi.jp","hidaka.kochi.jp","higashitsuno.kochi.jp","ino.kochi.jp","kagami.kochi.jp","kami.kochi.jp","kitagawa.kochi.jp","kochi.kochi.jp","mihara.kochi.jp","motoyama.kochi.jp","muroto.kochi.jp","nahari.kochi.jp","nakamura.kochi.jp","nankoku.kochi.jp","nishitosa.kochi.jp","niyodogawa.kochi.jp","ochi.kochi.jp","okawa.kochi.jp","otoyo.kochi.jp","otsuki.kochi.jp","sakawa.kochi.jp","sukumo.kochi.jp","susaki.kochi.jp","tosa.kochi.jp","tosashimizu.kochi.jp","toyo.kochi.jp","tsuno.kochi.jp","umaji.kochi.jp","yasuda.kochi.jp","yusuhara.kochi.jp","amakusa.kumamoto.jp","arao.kumamoto.jp","aso.kumamoto.jp","choyo.kumamoto.jp","gyokuto.kumamoto.jp","kamiamakusa.kumamoto.jp","kikuchi.kumamoto.jp","kumamoto.kumamoto.jp","mashiki.kumamoto.jp","mifune.kumamoto.jp","minamata.kumamoto.jp","minamioguni.kumamoto.jp","nagasu.kumamoto.jp","nishihara.kumamoto.jp","oguni.kumamoto.jp","ozu.kumamoto.jp","sumoto.kumamoto.jp","takamori.kumamoto.jp","uki.kumamoto.jp","uto.kumamoto.jp","yamaga.kumamoto.jp","yamato.kumamoto.jp","yatsushiro.kumamoto.jp","ayabe.kyoto.jp","fukuchiyama.kyoto.jp","higashiyama.kyoto.jp","ide.kyoto.jp","ine.kyoto.jp","joyo.kyoto.jp","kameoka.kyoto.jp","kamo.kyoto.jp","kita.kyoto.jp","kizu.kyoto.jp","kumiyama.kyoto.jp","kyotamba.kyoto.jp","kyotanabe.kyoto.jp","kyotango.kyoto.jp","maizuru.kyoto.jp","minami.kyoto.jp","minamiyamashiro.kyoto.jp","miyazu.kyoto.jp","muko.kyoto.jp","nagaokakyo.kyoto.jp","nakagyo.kyoto.jp","nantan.kyoto.jp","oyamazaki.kyoto.jp","sakyo.kyoto.jp","seika.kyoto.jp","tanabe.kyoto.jp","uji.kyoto.jp","ujitawara.kyoto.jp","wazuka.kyoto.jp","yamashina.kyoto.jp","yawata.kyoto.jp","asahi.mie.jp","inabe.mie.jp","ise.mie.jp","kameyama.mie.jp","kawagoe.mie.jp","kiho.mie.jp","kisosaki.mie.jp","kiwa.mie.jp","komono.mie.jp","kumano.mie.jp","kuwana.mie.jp","matsusaka.mie.jp","meiwa.mie.jp","mihama.mie.jp","minamiise.mie.jp","misugi.mie.jp","miyama.mie.jp","nabari.mie.jp","shima.mie.jp","suzuka.mie.jp","tado.mie.jp","taiki.mie.jp","taki.mie.jp","tamaki.mie.jp","toba.mie.jp","tsu.mie.jp","udono.mie.jp","ureshino.mie.jp","watarai.mie.jp","yokkaichi.mie.jp","furukawa.miyagi.jp","higashimatsushima.miyagi.jp","ishinomaki.miyagi.jp","iwanuma.miyagi.jp","kakuda.miyagi.jp","kami.miyagi.jp","kawasaki.miyagi.jp","marumori.miyagi.jp","matsushima.miyagi.jp","minamisanriku.miyagi.jp","misato.miyagi.jp","murata.miyagi.jp","natori.miyagi.jp","ogawara.miyagi.jp","ohira.miyagi.jp","onagawa.miyagi.jp","osaki.miyagi.jp","rifu.miyagi.jp","semine.miyagi.jp","shibata.miyagi.jp","shichikashuku.miyagi.jp","shikama.miyagi.jp","shiogama.miyagi.jp","shiroishi.miyagi.jp","tagajo.miyagi.jp","taiwa.miyagi.jp","tome.miyagi.jp","tomiya.miyagi.jp","wakuya.miyagi.jp","watari.miyagi.jp","yamamoto.miyagi.jp","zao.miyagi.jp","aya.miyazaki.jp","ebino.miyazaki.jp","gokase.miyazaki.jp","hyuga.miyazaki.jp","kadogawa.miyazaki.jp","kawaminami.miyazaki.jp","kijo.miyazaki.jp","kitagawa.miyazaki.jp","kitakata.miyazaki.jp","kitaura.miyazaki.jp","kobayashi.miyazaki.jp","kunitomi.miyazaki.jp","kushima.miyazaki.jp","mimata.miyazaki.jp","miyakonojo.miyazaki.jp","miyazaki.miyazaki.jp","morotsuka.miyazaki.jp","nichinan.miyazaki.jp","nishimera.miyazaki.jp","nobeoka.miyazaki.jp","saito.miyazaki.jp","shiiba.miyazaki.jp","shintomi.miyazaki.jp","takaharu.miyazaki.jp","takanabe.miyazaki.jp","takazaki.miyazaki.jp","tsuno.miyazaki.jp","achi.nagano.jp","agematsu.nagano.jp","anan.nagano.jp","aoki.nagano.jp","asahi.nagano.jp","azumino.nagano.jp","chikuhoku.nagano.jp","chikuma.nagano.jp","chino.nagano.jp","fujimi.nagano.jp","hakuba.nagano.jp","hara.nagano.jp","hiraya.nagano.jp","iida.nagano.jp","iijima.nagano.jp","iiyama.nagano.jp","iizuna.nagano.jp","ikeda.nagano.jp","ikusaka.nagano.jp","ina.nagano.jp","karuizawa.nagano.jp","kawakami.nagano.jp","kiso.nagano.jp","kisofukushima.nagano.jp","kitaaiki.nagano.jp","komagane.nagano.jp","komoro.nagano.jp","matsukawa.nagano.jp","matsumoto.nagano.jp","miasa.nagano.jp","minamiaiki.nagano.jp","minamimaki.nagano.jp","minamiminowa.nagano.jp","minowa.nagano.jp","miyada.nagano.jp","miyota.nagano.jp","mochizuki.nagano.jp","nagano.nagano.jp","nagawa.nagano.jp","nagiso.nagano.jp","nakagawa.nagano.jp","nakano.nagano.jp","nozawaonsen.nagano.jp","obuse.nagano.jp","ogawa.nagano.jp","okaya.nagano.jp","omachi.nagano.jp","omi.nagano.jp","ookuwa.nagano.jp","ooshika.nagano.jp","otaki.nagano.jp","otari.nagano.jp","sakae.nagano.jp","sakaki.nagano.jp","saku.nagano.jp","sakuho.nagano.jp","shimosuwa.nagano.jp","shinanomachi.nagano.jp","shiojiri.nagano.jp","suwa.nagano.jp","suzaka.nagano.jp","takagi.nagano.jp","takamori.nagano.jp","takayama.nagano.jp","tateshina.nagano.jp","tatsuno.nagano.jp","togakushi.nagano.jp","togura.nagano.jp","tomi.nagano.jp","ueda.nagano.jp","wada.nagano.jp","yamagata.nagano.jp","yamanouchi.nagano.jp","yasaka.nagano.jp","yasuoka.nagano.jp","chijiwa.nagasaki.jp","futsu.nagasaki.jp","goto.nagasaki.jp","hasami.nagasaki.jp","hirado.nagasaki.jp","iki.nagasaki.jp","isahaya.nagasaki.jp","kawatana.nagasaki.jp","kuchinotsu.nagasaki.jp","matsuura.nagasaki.jp","nagasaki.nagasaki.jp","obama.nagasaki.jp","omura.nagasaki.jp","oseto.nagasaki.jp","saikai.nagasaki.jp","sasebo.nagasaki.jp","seihi.nagasaki.jp","shimabara.nagasaki.jp","shinkamigoto.nagasaki.jp","togitsu.nagasaki.jp","tsushima.nagasaki.jp","unzen.nagasaki.jp","ando.nara.jp","gose.nara.jp","heguri.nara.jp","higashiyoshino.nara.jp","ikaruga.nara.jp","ikoma.nara.jp","kamikitayama.nara.jp","kanmaki.nara.jp","kashiba.nara.jp","kashihara.nara.jp","katsuragi.nara.jp","kawai.nara.jp","kawakami.nara.jp","kawanishi.nara.jp","koryo.nara.jp","kurotaki.nara.jp","mitsue.nara.jp","miyake.nara.jp","nara.nara.jp","nosegawa.nara.jp","oji.nara.jp","ouda.nara.jp","oyodo.nara.jp","sakurai.nara.jp","sango.nara.jp","shimoichi.nara.jp","shimokitayama.nara.jp","shinjo.nara.jp","soni.nara.jp","takatori.nara.jp","tawaramoto.nara.jp","tenkawa.nara.jp","tenri.nara.jp","uda.nara.jp","yamatokoriyama.nara.jp","yamatotakada.nara.jp","yamazoe.nara.jp","yoshino.nara.jp","aga.niigata.jp","agano.niigata.jp","gosen.niigata.jp","itoigawa.niigata.jp","izumozaki.niigata.jp","joetsu.niigata.jp","kamo.niigata.jp","kariwa.niigata.jp","kashiwazaki.niigata.jp","minamiuonuma.niigata.jp","mitsuke.niigata.jp","muika.niigata.jp","murakami.niigata.jp","myoko.niigata.jp","nagaoka.niigata.jp","niigata.niigata.jp","ojiya.niigata.jp","omi.niigata.jp","sado.niigata.jp","sanjo.niigata.jp","seiro.niigata.jp","seirou.niigata.jp","sekikawa.niigata.jp","shibata.niigata.jp","tagami.niigata.jp","tainai.niigata.jp","tochio.niigata.jp","tokamachi.niigata.jp","tsubame.niigata.jp","tsunan.niigata.jp","uonuma.niigata.jp","yahiko.niigata.jp","yoita.niigata.jp","yuzawa.niigata.jp","beppu.oita.jp","bungoono.oita.jp","bungotakada.oita.jp","hasama.oita.jp","hiji.oita.jp","himeshima.oita.jp","hita.oita.jp","kamitsue.oita.jp","kokonoe.oita.jp","kuju.oita.jp","kunisaki.oita.jp","kusu.oita.jp","oita.oita.jp","saiki.oita.jp","taketa.oita.jp","tsukumi.oita.jp","usa.oita.jp","usuki.oita.jp","yufu.oita.jp","akaiwa.okayama.jp","asakuchi.okayama.jp","bizen.okayama.jp","hayashima.okayama.jp","ibara.okayama.jp","kagamino.okayama.jp","kasaoka.okayama.jp","kibichuo.okayama.jp","kumenan.okayama.jp","kurashiki.okayama.jp","maniwa.okayama.jp","misaki.okayama.jp","nagi.okayama.jp","niimi.okayama.jp","nishiawakura.okayama.jp","okayama.okayama.jp","satosho.okayama.jp","setouchi.okayama.jp","shinjo.okayama.jp","shoo.okayama.jp","soja.okayama.jp","takahashi.okayama.jp","tamano.okayama.jp","tsuyama.okayama.jp","wake.okayama.jp","yakage.okayama.jp","aguni.okinawa.jp","ginowan.okinawa.jp","ginoza.okinawa.jp","gushikami.okinawa.jp","haebaru.okinawa.jp","higashi.okinawa.jp","hirara.okinawa.jp","iheya.okinawa.jp","ishigaki.okinawa.jp","ishikawa.okinawa.jp","itoman.okinawa.jp","izena.okinawa.jp","kadena.okinawa.jp","kin.okinawa.jp","kitadaito.okinawa.jp","kitanakagusuku.okinawa.jp","kumejima.okinawa.jp","kunigami.okinawa.jp","minamidaito.okinawa.jp","motobu.okinawa.jp","nago.okinawa.jp","naha.okinawa.jp","nakagusuku.okinawa.jp","nakijin.okinawa.jp","nanjo.okinawa.jp","nishihara.okinawa.jp","ogimi.okinawa.jp","okinawa.okinawa.jp","onna.okinawa.jp","shimoji.okinawa.jp","taketomi.okinawa.jp","tarama.okinawa.jp","tokashiki.okinawa.jp","tomigusuku.okinawa.jp","tonaki.okinawa.jp","urasoe.okinawa.jp","uruma.okinawa.jp","yaese.okinawa.jp","yomitan.okinawa.jp","yonabaru.okinawa.jp","yonaguni.okinawa.jp","zamami.okinawa.jp","abeno.osaka.jp","chihayaakasaka.osaka.jp","chuo.osaka.jp","daito.osaka.jp","fujiidera.osaka.jp","habikino.osaka.jp","hannan.osaka.jp","higashiosaka.osaka.jp","higashisumiyoshi.osaka.jp","higashiyodogawa.osaka.jp","hirakata.osaka.jp","ibaraki.osaka.jp","ikeda.osaka.jp","izumi.osaka.jp","izumiotsu.osaka.jp","izumisano.osaka.jp","kadoma.osaka.jp","kaizuka.osaka.jp","kanan.osaka.jp","kashiwara.osaka.jp","katano.osaka.jp","kawachinagano.osaka.jp","kishiwada.osaka.jp","kita.osaka.jp","kumatori.osaka.jp","matsubara.osaka.jp","minato.osaka.jp","minoh.osaka.jp","misaki.osaka.jp","moriguchi.osaka.jp","neyagawa.osaka.jp","nishi.osaka.jp","nose.osaka.jp","osakasayama.osaka.jp","sakai.osaka.jp","sayama.osaka.jp","sennan.osaka.jp","settsu.osaka.jp","shijonawate.osaka.jp","shimamoto.osaka.jp","suita.osaka.jp","tadaoka.osaka.jp","taishi.osaka.jp","tajiri.osaka.jp","takaishi.osaka.jp","takatsuki.osaka.jp","tondabayashi.osaka.jp","toyonaka.osaka.jp","toyono.osaka.jp","yao.osaka.jp","ariake.saga.jp","arita.saga.jp","fukudomi.saga.jp","genkai.saga.jp","hamatama.saga.jp","hizen.saga.jp","imari.saga.jp","kamimine.saga.jp","kanzaki.saga.jp","karatsu.saga.jp","kashima.saga.jp","kitagata.saga.jp","kitahata.saga.jp","kiyama.saga.jp","kouhoku.saga.jp","kyuragi.saga.jp","nishiarita.saga.jp","ogi.saga.jp","omachi.saga.jp","ouchi.saga.jp","saga.saga.jp","shiroishi.saga.jp","taku.saga.jp","tara.saga.jp","tosu.saga.jp","yoshinogari.saga.jp","arakawa.saitama.jp","asaka.saitama.jp","chichibu.saitama.jp","fujimi.saitama.jp","fujimino.saitama.jp","fukaya.saitama.jp","hanno.saitama.jp","hanyu.saitama.jp","hasuda.saitama.jp","hatogaya.saitama.jp","hatoyama.saitama.jp","hidaka.saitama.jp","higashichichibu.saitama.jp","higashimatsuyama.saitama.jp","honjo.saitama.jp","ina.saitama.jp","iruma.saitama.jp","iwatsuki.saitama.jp","kamiizumi.saitama.jp","kamikawa.saitama.jp","kamisato.saitama.jp","kasukabe.saitama.jp","kawagoe.saitama.jp","kawaguchi.saitama.jp","kawajima.saitama.jp","kazo.saitama.jp","kitamoto.saitama.jp","koshigaya.saitama.jp","kounosu.saitama.jp","kuki.saitama.jp","kumagaya.saitama.jp","matsubushi.saitama.jp","minano.saitama.jp","misato.saitama.jp","miyashiro.saitama.jp","miyoshi.saitama.jp","moroyama.saitama.jp","nagatoro.saitama.jp","namegawa.saitama.jp","niiza.saitama.jp","ogano.saitama.jp","ogawa.saitama.jp","ogose.saitama.jp","okegawa.saitama.jp","omiya.saitama.jp","otaki.saitama.jp","ranzan.saitama.jp","ryokami.saitama.jp","saitama.saitama.jp","sakado.saitama.jp","satte.saitama.jp","sayama.saitama.jp","shiki.saitama.jp","shiraoka.saitama.jp","soka.saitama.jp","sugito.saitama.jp","toda.saitama.jp","tokigawa.saitama.jp","tokorozawa.saitama.jp","tsurugashima.saitama.jp","urawa.saitama.jp","warabi.saitama.jp","yashio.saitama.jp","yokoze.saitama.jp","yono.saitama.jp","yorii.saitama.jp","yoshida.saitama.jp","yoshikawa.saitama.jp","yoshimi.saitama.jp","aisho.shiga.jp","gamo.shiga.jp","higashiomi.shiga.jp","hikone.shiga.jp","koka.shiga.jp","konan.shiga.jp","kosei.shiga.jp","koto.shiga.jp","kusatsu.shiga.jp","maibara.shiga.jp","moriyama.shiga.jp","nagahama.shiga.jp","nishiazai.shiga.jp","notogawa.shiga.jp","omihachiman.shiga.jp","otsu.shiga.jp","ritto.shiga.jp","ryuoh.shiga.jp","takashima.shiga.jp","takatsuki.shiga.jp","torahime.shiga.jp","toyosato.shiga.jp","yasu.shiga.jp","akagi.shimane.jp","ama.shimane.jp","gotsu.shimane.jp","hamada.shimane.jp","higashiizumo.shimane.jp","hikawa.shimane.jp","hikimi.shimane.jp","izumo.shimane.jp","kakinoki.shimane.jp","masuda.shimane.jp","matsue.shimane.jp","misato.shimane.jp","nishinoshima.shimane.jp","ohda.shimane.jp","okinoshima.shimane.jp","okuizumo.shimane.jp","shimane.shimane.jp","tamayu.shimane.jp","tsuwano.shimane.jp","unnan.shimane.jp","yakumo.shimane.jp","yasugi.shimane.jp","yatsuka.shimane.jp","arai.shizuoka.jp","atami.shizuoka.jp","fuji.shizuoka.jp","fujieda.shizuoka.jp","fujikawa.shizuoka.jp","fujinomiya.shizuoka.jp","fukuroi.shizuoka.jp","gotemba.shizuoka.jp","haibara.shizuoka.jp","hamamatsu.shizuoka.jp","higashiizu.shizuoka.jp","ito.shizuoka.jp","iwata.shizuoka.jp","izu.shizuoka.jp","izunokuni.shizuoka.jp","kakegawa.shizuoka.jp","kannami.shizuoka.jp","kawanehon.shizuoka.jp","kawazu.shizuoka.jp","kikugawa.shizuoka.jp","kosai.shizuoka.jp","makinohara.shizuoka.jp","matsuzaki.shizuoka.jp","minamiizu.shizuoka.jp","mishima.shizuoka.jp","morimachi.shizuoka.jp","nishiizu.shizuoka.jp","numazu.shizuoka.jp","omaezaki.shizuoka.jp","shimada.shizuoka.jp","shimizu.shizuoka.jp","shimoda.shizuoka.jp","shizuoka.shizuoka.jp","susono.shizuoka.jp","yaizu.shizuoka.jp","yoshida.shizuoka.jp","ashikaga.tochigi.jp","bato.tochigi.jp","haga.tochigi.jp","ichikai.tochigi.jp","iwafune.tochigi.jp","kaminokawa.tochigi.jp","kanuma.tochigi.jp","karasuyama.tochigi.jp","kuroiso.tochigi.jp","mashiko.tochigi.jp","mibu.tochigi.jp","moka.tochigi.jp","motegi.tochigi.jp","nasu.tochigi.jp","nasushiobara.tochigi.jp","nikko.tochigi.jp","nishikata.tochigi.jp","nogi.tochigi.jp","ohira.tochigi.jp","ohtawara.tochigi.jp","oyama.tochigi.jp","sakura.tochigi.jp","sano.tochigi.jp","shimotsuke.tochigi.jp","shioya.tochigi.jp","takanezawa.tochigi.jp","tochigi.tochigi.jp","tsuga.tochigi.jp","ujiie.tochigi.jp","utsunomiya.tochigi.jp","yaita.tochigi.jp","aizumi.tokushima.jp","anan.tokushima.jp","ichiba.tokushima.jp","itano.tokushima.jp","kainan.tokushima.jp","komatsushima.tokushima.jp","matsushige.tokushima.jp","mima.tokushima.jp","minami.tokushima.jp","miyoshi.tokushima.jp","mugi.tokushima.jp","nakagawa.tokushima.jp","naruto.tokushima.jp","sanagochi.tokushima.jp","shishikui.tokushima.jp","tokushima.tokushima.jp","wajiki.tokushima.jp","adachi.tokyo.jp","akiruno.tokyo.jp","akishima.tokyo.jp","aogashima.tokyo.jp","arakawa.tokyo.jp","bunkyo.tokyo.jp","chiyoda.tokyo.jp","chofu.tokyo.jp","chuo.tokyo.jp","edogawa.tokyo.jp","fuchu.tokyo.jp","fussa.tokyo.jp","hachijo.tokyo.jp","hachioji.tokyo.jp","hamura.tokyo.jp","higashikurume.tokyo.jp","higashimurayama.tokyo.jp","higashiyamato.tokyo.jp","hino.tokyo.jp","hinode.tokyo.jp","hinohara.tokyo.jp","inagi.tokyo.jp","itabashi.tokyo.jp","katsushika.tokyo.jp","kita.tokyo.jp","kiyose.tokyo.jp","kodaira.tokyo.jp","koganei.tokyo.jp","kokubunji.tokyo.jp","komae.tokyo.jp","koto.tokyo.jp","kouzushima.tokyo.jp","kunitachi.tokyo.jp","machida.tokyo.jp","meguro.tokyo.jp","minato.tokyo.jp","mitaka.tokyo.jp","mizuho.tokyo.jp","musashimurayama.tokyo.jp","musashino.tokyo.jp","nakano.tokyo.jp","nerima.tokyo.jp","ogasawara.tokyo.jp","okutama.tokyo.jp","ome.tokyo.jp","oshima.tokyo.jp","ota.tokyo.jp","setagaya.tokyo.jp","shibuya.tokyo.jp","shinagawa.tokyo.jp","shinjuku.tokyo.jp","suginami.tokyo.jp","sumida.tokyo.jp","tachikawa.tokyo.jp","taito.tokyo.jp","tama.tokyo.jp","toshima.tokyo.jp","chizu.tottori.jp","hino.tottori.jp","kawahara.tottori.jp","koge.tottori.jp","kotoura.tottori.jp","misasa.tottori.jp","nanbu.tottori.jp","nichinan.tottori.jp","sakaiminato.tottori.jp","tottori.tottori.jp","wakasa.tottori.jp","yazu.tottori.jp","yonago.tottori.jp","asahi.toyama.jp","fuchu.toyama.jp","fukumitsu.toyama.jp","funahashi.toyama.jp","himi.toyama.jp","imizu.toyama.jp","inami.toyama.jp","johana.toyama.jp","kamiichi.toyama.jp","kurobe.toyama.jp","nakaniikawa.toyama.jp","namerikawa.toyama.jp","nanto.toyama.jp","nyuzen.toyama.jp","oyabe.toyama.jp","taira.toyama.jp","takaoka.toyama.jp","tateyama.toyama.jp","toga.toyama.jp","tonami.toyama.jp","toyama.toyama.jp","unazuki.toyama.jp","uozu.toyama.jp","yamada.toyama.jp","arida.wakayama.jp","aridagawa.wakayama.jp","gobo.wakayama.jp","hashimoto.wakayama.jp","hidaka.wakayama.jp","hirogawa.wakayama.jp","inami.wakayama.jp","iwade.wakayama.jp","kainan.wakayama.jp","kamitonda.wakayama.jp","katsuragi.wakayama.jp","kimino.wakayama.jp","kinokawa.wakayama.jp","kitayama.wakayama.jp","koya.wakayama.jp","koza.wakayama.jp","kozagawa.wakayama.jp","kudoyama.wakayama.jp","kushimoto.wakayama.jp","mihama.wakayama.jp","misato.wakayama.jp","nachikatsuura.wakayama.jp","shingu.wakayama.jp","shirahama.wakayama.jp","taiji.wakayama.jp","tanabe.wakayama.jp","wakayama.wakayama.jp","yuasa.wakayama.jp","yura.wakayama.jp","asahi.yamagata.jp","funagata.yamagata.jp","higashine.yamagata.jp","iide.yamagata.jp","kahoku.yamagata.jp","kaminoyama.yamagata.jp","kaneyama.yamagata.jp","kawanishi.yamagata.jp","mamurogawa.yamagata.jp","mikawa.yamagata.jp","murayama.yamagata.jp","nagai.yamagata.jp","nakayama.yamagata.jp","nanyo.yamagata.jp","nishikawa.yamagata.jp","obanazawa.yamagata.jp","oe.yamagata.jp","oguni.yamagata.jp","ohkura.yamagata.jp","oishida.yamagata.jp","sagae.yamagata.jp","sakata.yamagata.jp","sakegawa.yamagata.jp","shinjo.yamagata.jp","shirataka.yamagata.jp","shonai.yamagata.jp","takahata.yamagata.jp","tendo.yamagata.jp","tozawa.yamagata.jp","tsuruoka.yamagata.jp","yamagata.yamagata.jp","yamanobe.yamagata.jp","yonezawa.yamagata.jp","yuza.yamagata.jp","abu.yamaguchi.jp","hagi.yamaguchi.jp","hikari.yamaguchi.jp","hofu.yamaguchi.jp","iwakuni.yamaguchi.jp","kudamatsu.yamaguchi.jp","mitou.yamaguchi.jp","nagato.yamaguchi.jp","oshima.yamaguchi.jp","shimonoseki.yamaguchi.jp","shunan.yamaguchi.jp","tabuse.yamaguchi.jp","tokuyama.yamaguchi.jp","toyota.yamaguchi.jp","ube.yamaguchi.jp","yuu.yamaguchi.jp","chuo.yamanashi.jp","doshi.yamanashi.jp","fuefuki.yamanashi.jp","fujikawa.yamanashi.jp","fujikawaguchiko.yamanashi.jp","fujiyoshida.yamanashi.jp","hayakawa.yamanashi.jp","hokuto.yamanashi.jp","ichikawamisato.yamanashi.jp","kai.yamanashi.jp","kofu.yamanashi.jp","koshu.yamanashi.jp","kosuge.yamanashi.jp","minami-alps.yamanashi.jp","minobu.yamanashi.jp","nakamichi.yamanashi.jp","nanbu.yamanashi.jp","narusawa.yamanashi.jp","nirasaki.yamanashi.jp","nishikatsura.yamanashi.jp","oshino.yamanashi.jp","otsuki.yamanashi.jp","showa.yamanashi.jp","tabayama.yamanashi.jp","tsuru.yamanashi.jp","uenohara.yamanashi.jp","yamanakako.yamanashi.jp","yamanashi.yamanashi.jp","ke","ac.ke","co.ke","go.ke","info.ke","me.ke","mobi.ke","ne.ke","or.ke","sc.ke","kg","org.kg","net.kg","com.kg","edu.kg","gov.kg","mil.kg","*.kh","ki","edu.ki","biz.ki","net.ki","org.ki","gov.ki","info.ki","com.ki","km","org.km","nom.km","gov.km","prd.km","tm.km","edu.km","mil.km","ass.km","com.km","coop.km","asso.km","presse.km","medecin.km","notaires.km","pharmaciens.km","veterinaire.km","gouv.km","kn","net.kn","org.kn","edu.kn","gov.kn","kp","com.kp","edu.kp","gov.kp","org.kp","rep.kp","tra.kp","kr","ac.kr","co.kr","es.kr","go.kr","hs.kr","kg.kr","mil.kr","ms.kr","ne.kr","or.kr","pe.kr","re.kr","sc.kr","busan.kr","chungbuk.kr","chungnam.kr","daegu.kr","daejeon.kr","gangwon.kr","gwangju.kr","gyeongbuk.kr","gyeonggi.kr","gyeongnam.kr","incheon.kr","jeju.kr","jeonbuk.kr","jeonnam.kr","seoul.kr","ulsan.kr","kw","com.kw","edu.kw","emb.kw","gov.kw","ind.kw","net.kw","org.kw","ky","edu.ky","gov.ky","com.ky","org.ky","net.ky","kz","org.kz","edu.kz","net.kz","gov.kz","mil.kz","com.kz","la","int.la","net.la","info.la","edu.la","gov.la","per.la","com.la","org.la","lb","com.lb","edu.lb","gov.lb","net.lb","org.lb","lc","com.lc","net.lc","co.lc","org.lc","edu.lc","gov.lc","li","lk","gov.lk","sch.lk","net.lk","int.lk","com.lk","org.lk","edu.lk","ngo.lk","soc.lk","web.lk","ltd.lk","assn.lk","grp.lk","hotel.lk","ac.lk","lr","com.lr","edu.lr","gov.lr","org.lr","net.lr","ls","co.ls","org.ls","lt","gov.lt","lu","lv","com.lv","edu.lv","gov.lv","org.lv","mil.lv","id.lv","net.lv","asn.lv","conf.lv","ly","com.ly","net.ly","gov.ly","plc.ly","edu.ly","sch.ly","med.ly","org.ly","id.ly","ma","co.ma","net.ma","gov.ma","org.ma","ac.ma","press.ma","mc","tm.mc","asso.mc","md","me","co.me","net.me","org.me","edu.me","ac.me","gov.me","its.me","priv.me","mg","org.mg","nom.mg","gov.mg","prd.mg","tm.mg","edu.mg","mil.mg","com.mg","co.mg","mh","mil","mk","com.mk","org.mk","net.mk","edu.mk","gov.mk","inf.mk","name.mk","ml","com.ml","edu.ml","gouv.ml","gov.ml","net.ml","org.ml","presse.ml","*.mm","mn","gov.mn","edu.mn","org.mn","mo","com.mo","net.mo","org.mo","edu.mo","gov.mo","mobi","mp","mq","mr","gov.mr","ms","com.ms","edu.ms","gov.ms","net.ms","org.ms","mt","com.mt","edu.mt","net.mt","org.mt","mu","com.mu","net.mu","org.mu","gov.mu","ac.mu","co.mu","or.mu","museum","academy.museum","agriculture.museum","air.museum","airguard.museum","alabama.museum","alaska.museum","amber.museum","ambulance.museum","american.museum","americana.museum","americanantiques.museum","americanart.museum","amsterdam.museum","and.museum","annefrank.museum","anthro.museum","anthropology.museum","antiques.museum","aquarium.museum","arboretum.museum","archaeological.museum","archaeology.museum","architecture.museum","art.museum","artanddesign.museum","artcenter.museum","artdeco.museum","arteducation.museum","artgallery.museum","arts.museum","artsandcrafts.museum","asmatart.museum","assassination.museum","assisi.museum","association.museum","astronomy.museum","atlanta.museum","austin.museum","australia.museum","automotive.museum","aviation.museum","axis.museum","badajoz.museum","baghdad.museum","bahn.museum","bale.museum","baltimore.museum","barcelona.museum","baseball.museum","basel.museum","baths.museum","bauern.museum","beauxarts.museum","beeldengeluid.museum","bellevue.museum","bergbau.museum","berkeley.museum","berlin.museum","bern.museum","bible.museum","bilbao.museum","bill.museum","birdart.museum","birthplace.museum","bonn.museum","boston.museum","botanical.museum","botanicalgarden.museum","botanicgarden.museum","botany.museum","brandywinevalley.museum","brasil.museum","bristol.museum","british.museum","britishcolumbia.museum","broadcast.museum","brunel.museum","brussel.museum","brussels.museum","bruxelles.museum","building.museum","burghof.museum","bus.museum","bushey.museum","cadaques.museum","california.museum","cambridge.museum","can.museum","canada.museum","capebreton.museum","carrier.museum","cartoonart.museum","casadelamoneda.museum","castle.museum","castres.museum","celtic.museum","center.museum","chattanooga.museum","cheltenham.museum","chesapeakebay.museum","chicago.museum","children.museum","childrens.museum","childrensgarden.museum","chiropractic.museum","chocolate.museum","christiansburg.museum","cincinnati.museum","cinema.museum","circus.museum","civilisation.museum","civilization.museum","civilwar.museum","clinton.museum","clock.museum","coal.museum","coastaldefence.museum","cody.museum","coldwar.museum","collection.museum","colonialwilliamsburg.museum","coloradoplateau.museum","columbia.museum","columbus.museum","communication.museum","communications.museum","community.museum","computer.museum","computerhistory.museum","comunicações.museum","contemporary.museum","contemporaryart.museum","convent.museum","copenhagen.museum","corporation.museum","correios-e-telecomunicações.museum","corvette.museum","costume.museum","countryestate.museum","county.museum","crafts.museum","cranbrook.museum","creation.museum","cultural.museum","culturalcenter.museum","culture.museum","cyber.museum","cymru.museum","dali.museum","dallas.museum","database.museum","ddr.museum","decorativearts.museum","delaware.museum","delmenhorst.museum","denmark.museum","depot.museum","design.museum","detroit.museum","dinosaur.museum","discovery.museum","dolls.museum","donostia.museum","durham.museum","eastafrica.museum","eastcoast.museum","education.museum","educational.museum","egyptian.museum","eisenbahn.museum","elburg.museum","elvendrell.museum","embroidery.museum","encyclopedic.museum","england.museum","entomology.museum","environment.museum","environmentalconservation.museum","epilepsy.museum","essex.museum","estate.museum","ethnology.museum","exeter.museum","exhibition.museum","family.museum","farm.museum","farmequipment.museum","farmers.museum","farmstead.museum","field.museum","figueres.museum","filatelia.museum","film.museum","fineart.museum","finearts.museum","finland.museum","flanders.museum","florida.museum","force.museum","fortmissoula.museum","fortworth.museum","foundation.museum","francaise.museum","frankfurt.museum","franziskaner.museum","freemasonry.museum","freiburg.museum","fribourg.museum","frog.museum","fundacio.museum","furniture.museum","gallery.museum","garden.museum","gateway.museum","geelvinck.museum","gemological.museum","geology.museum","georgia.museum","giessen.museum","glas.museum","glass.museum","gorge.museum","grandrapids.museum","graz.museum","guernsey.museum","halloffame.museum","hamburg.museum","handson.museum","harvestcelebration.museum","hawaii.museum","health.museum","heimatunduhren.museum","hellas.museum","helsinki.museum","hembygdsforbund.museum","heritage.museum","histoire.museum","historical.museum","historicalsociety.museum","historichouses.museum","historisch.museum","historisches.museum","history.museum","historyofscience.museum","horology.museum","house.museum","humanities.museum","illustration.museum","imageandsound.museum","indian.museum","indiana.museum","indianapolis.museum","indianmarket.museum","intelligence.museum","interactive.museum","iraq.museum","iron.museum","isleofman.museum","jamison.museum","jefferson.museum","jerusalem.museum","jewelry.museum","jewish.museum","jewishart.museum","jfk.museum","journalism.museum","judaica.museum","judygarland.museum","juedisches.museum","juif.museum","karate.museum","karikatur.museum","kids.museum","koebenhavn.museum","koeln.museum","kunst.museum","kunstsammlung.museum","kunstunddesign.museum","labor.museum","labour.museum","lajolla.museum","lancashire.museum","landes.museum","lans.museum","läns.museum","larsson.museum","lewismiller.museum","lincoln.museum","linz.museum","living.museum","livinghistory.museum","localhistory.museum","london.museum","losangeles.museum","louvre.museum","loyalist.museum","lucerne.museum","luxembourg.museum","luzern.museum","mad.museum","madrid.museum","mallorca.museum","manchester.museum","mansion.museum","mansions.museum","manx.museum","marburg.museum","maritime.museum","maritimo.museum","maryland.museum","marylhurst.museum","media.museum","medical.museum","medizinhistorisches.museum","meeres.museum","memorial.museum","mesaverde.museum","michigan.museum","midatlantic.museum","military.museum","mill.museum","miners.museum","mining.museum","minnesota.museum","missile.museum","missoula.museum","modern.museum","moma.museum","money.museum","monmouth.museum","monticello.museum","montreal.museum","moscow.museum","motorcycle.museum","muenchen.museum","muenster.museum","mulhouse.museum","muncie.museum","museet.museum","museumcenter.museum","museumvereniging.museum","music.museum","national.museum","nationalfirearms.museum","nationalheritage.museum","nativeamerican.museum","naturalhistory.museum","naturalhistorymuseum.museum","naturalsciences.museum","nature.museum","naturhistorisches.museum","natuurwetenschappen.museum","naumburg.museum","naval.museum","nebraska.museum","neues.museum","newhampshire.museum","newjersey.museum","newmexico.museum","newport.museum","newspaper.museum","newyork.museum","niepce.museum","norfolk.museum","north.museum","nrw.museum","nuernberg.museum","nuremberg.museum","nyc.museum","nyny.museum","oceanographic.museum","oceanographique.museum","omaha.museum","online.museum","ontario.museum","openair.museum","oregon.museum","oregontrail.museum","otago.museum","oxford.museum","pacific.museum","paderborn.museum","palace.museum","paleo.museum","palmsprings.museum","panama.museum","paris.museum","pasadena.museum","pharmacy.museum","philadelphia.museum","philadelphiaarea.museum","philately.museum","phoenix.museum","photography.museum","pilots.museum","pittsburgh.museum","planetarium.museum","plantation.museum","plants.museum","plaza.museum","portal.museum","portland.museum","portlligat.museum","posts-and-telecommunications.museum","preservation.museum","presidio.museum","press.museum","project.museum","public.museum","pubol.museum","quebec.museum","railroad.museum","railway.museum","research.museum","resistance.museum","riodejaneiro.museum","rochester.museum","rockart.museum","roma.museum","russia.museum","saintlouis.museum","salem.museum","salvadordali.museum","salzburg.museum","sandiego.museum","sanfrancisco.museum","santabarbara.museum","santacruz.museum","santafe.museum","saskatchewan.museum","satx.museum","savannahga.museum","schlesisches.museum","schoenbrunn.museum","schokoladen.museum","school.museum","schweiz.museum","science.museum","scienceandhistory.museum","scienceandindustry.museum","sciencecenter.museum","sciencecenters.museum","science-fiction.museum","sciencehistory.museum","sciences.museum","sciencesnaturelles.museum","scotland.museum","seaport.museum","settlement.museum","settlers.museum","shell.museum","sherbrooke.museum","sibenik.museum","silk.museum","ski.museum","skole.museum","society.museum","sologne.museum","soundandvision.museum","southcarolina.museum","southwest.museum","space.museum","spy.museum","square.museum","stadt.museum","stalbans.museum","starnberg.museum","state.museum","stateofdelaware.museum","station.museum","steam.museum","steiermark.museum","stjohn.museum","stockholm.museum","stpetersburg.museum","stuttgart.museum","suisse.museum","surgeonshall.museum","surrey.museum","svizzera.museum","sweden.museum","sydney.museum","tank.museum","tcm.museum","technology.museum","telekommunikation.museum","television.museum","texas.museum","textile.museum","theater.museum","time.museum","timekeeping.museum","topology.museum","torino.museum","touch.museum","town.museum","transport.museum","tree.museum","trolley.museum","trust.museum","trustee.museum","uhren.museum","ulm.museum","undersea.museum","university.museum","usa.museum","usantiques.museum","usarts.museum","uscountryestate.museum","usculture.museum","usdecorativearts.museum","usgarden.museum","ushistory.museum","ushuaia.museum","uslivinghistory.museum","utah.museum","uvic.museum","valley.museum","vantaa.museum","versailles.museum","viking.museum","village.museum","virginia.museum","virtual.museum","virtuel.museum","vlaanderen.museum","volkenkunde.museum","wales.museum","wallonie.museum","war.museum","washingtondc.museum","watchandclock.museum","watch-and-clock.museum","western.museum","westfalen.museum","whaling.museum","wildlife.museum","williamsburg.museum","windmill.museum","workshop.museum","york.museum","yorkshire.museum","yosemite.museum","youth.museum","zoological.museum","zoology.museum","ירושלים.museum","иком.museum","mv","aero.mv","biz.mv","com.mv","coop.mv","edu.mv","gov.mv","info.mv","int.mv","mil.mv","museum.mv","name.mv","net.mv","org.mv","pro.mv","mw","ac.mw","biz.mw","co.mw","com.mw","coop.mw","edu.mw","gov.mw","int.mw","museum.mw","net.mw","org.mw","mx","com.mx","org.mx","gob.mx","edu.mx","net.mx","my","com.my","net.my","org.my","gov.my","edu.my","mil.my","name.my","mz","ac.mz","adv.mz","co.mz","edu.mz","gov.mz","mil.mz","net.mz","org.mz","na","info.na","pro.na","name.na","school.na","or.na","dr.na","us.na","mx.na","ca.na","in.na","cc.na","tv.na","ws.na","mobi.na","co.na","com.na","org.na","name","nc","asso.nc","nom.nc","ne","net","nf","com.nf","net.nf","per.nf","rec.nf","web.nf","arts.nf","firm.nf","info.nf","other.nf","store.nf","ng","com.ng","edu.ng","gov.ng","i.ng","mil.ng","mobi.ng","name.ng","net.ng","org.ng","sch.ng","ni","ac.ni","biz.ni","co.ni","com.ni","edu.ni","gob.ni","in.ni","info.ni","int.ni","mil.ni","net.ni","nom.ni","org.ni","web.ni","nl","bv.nl","no","fhs.no","vgs.no","fylkesbibl.no","folkebibl.no","museum.no","idrett.no","priv.no","mil.no","stat.no","dep.no","kommune.no","herad.no","aa.no","ah.no","bu.no","fm.no","hl.no","hm.no","jan-mayen.no","mr.no","nl.no","nt.no","of.no","ol.no","oslo.no","rl.no","sf.no","st.no","svalbard.no","tm.no","tr.no","va.no","vf.no","gs.aa.no","gs.ah.no","gs.bu.no","gs.fm.no","gs.hl.no","gs.hm.no","gs.jan-mayen.no","gs.mr.no","gs.nl.no","gs.nt.no","gs.of.no","gs.ol.no","gs.oslo.no","gs.rl.no","gs.sf.no","gs.st.no","gs.svalbard.no","gs.tm.no","gs.tr.no","gs.va.no","gs.vf.no","akrehamn.no","åkrehamn.no","algard.no","ålgård.no","arna.no","brumunddal.no","bryne.no","bronnoysund.no","brønnøysund.no","drobak.no","drøbak.no","egersund.no","fetsund.no","floro.no","florø.no","fredrikstad.no","hokksund.no","honefoss.no","hønefoss.no","jessheim.no","jorpeland.no","jørpeland.no","kirkenes.no","kopervik.no","krokstadelva.no","langevag.no","langevåg.no","leirvik.no","mjondalen.no","mjøndalen.no","mo-i-rana.no","mosjoen.no","mosjøen.no","nesoddtangen.no","orkanger.no","osoyro.no","osøyro.no","raholt.no","råholt.no","sandnessjoen.no","sandnessjøen.no","skedsmokorset.no","slattum.no","spjelkavik.no","stathelle.no","stavern.no","stjordalshalsen.no","stjørdalshalsen.no","tananger.no","tranby.no","vossevangen.no","afjord.no","åfjord.no","agdenes.no","al.no","ål.no","alesund.no","ålesund.no","alstahaug.no","alta.no","áltá.no","alaheadju.no","álaheadju.no","alvdal.no","amli.no","åmli.no","amot.no","åmot.no","andebu.no","andoy.no","andøy.no","andasuolo.no","ardal.no","årdal.no","aremark.no","arendal.no","ås.no","aseral.no","åseral.no","asker.no","askim.no","askvoll.no","askoy.no","askøy.no","asnes.no","åsnes.no","audnedaln.no","aukra.no","aure.no","aurland.no","aurskog-holand.no","aurskog-høland.no","austevoll.no","austrheim.no","averoy.no","averøy.no","balestrand.no","ballangen.no","balat.no","bálát.no","balsfjord.no","bahccavuotna.no","báhccavuotna.no","bamble.no","bardu.no","beardu.no","beiarn.no","bajddar.no","bájddar.no","baidar.no","báidár.no","berg.no","bergen.no","berlevag.no","berlevåg.no","bearalvahki.no","bearalváhki.no","bindal.no","birkenes.no","bjarkoy.no","bjarkøy.no","bjerkreim.no","bjugn.no","bodo.no","bodø.no","badaddja.no","bådåddjå.no","budejju.no","bokn.no","bremanger.no","bronnoy.no","brønnøy.no","bygland.no","bykle.no","barum.no","bærum.no","bo.telemark.no","bø.telemark.no","bo.nordland.no","bø.nordland.no","bievat.no","bievát.no","bomlo.no","bømlo.no","batsfjord.no","båtsfjord.no","bahcavuotna.no","báhcavuotna.no","dovre.no","drammen.no","drangedal.no","dyroy.no","dyrøy.no","donna.no","dønna.no","eid.no","eidfjord.no","eidsberg.no","eidskog.no","eidsvoll.no","eigersund.no","elverum.no","enebakk.no","engerdal.no","etne.no","etnedal.no","evenes.no","evenassi.no","evenášši.no","evje-og-hornnes.no","farsund.no","fauske.no","fuossko.no","fuoisku.no","fedje.no","fet.no","finnoy.no","finnøy.no","fitjar.no","fjaler.no","fjell.no","flakstad.no","flatanger.no","flekkefjord.no","flesberg.no","flora.no","fla.no","flå.no","folldal.no","forsand.no","fosnes.no","frei.no","frogn.no","froland.no","frosta.no","frana.no","fræna.no","froya.no","frøya.no","fusa.no","fyresdal.no","forde.no","førde.no","gamvik.no","gangaviika.no","gáŋgaviika.no","gaular.no","gausdal.no","gildeskal.no","gildeskål.no","giske.no","gjemnes.no","gjerdrum.no","gjerstad.no","gjesdal.no","gjovik.no","gjøvik.no","gloppen.no","gol.no","gran.no","grane.no","granvin.no","gratangen.no","grimstad.no","grong.no","kraanghke.no","kråanghke.no","grue.no","gulen.no","hadsel.no","halden.no","halsa.no","hamar.no","hamaroy.no","habmer.no","hábmer.no","hapmir.no","hápmir.no","hammerfest.no","hammarfeasta.no","hámmárfeasta.no","haram.no","hareid.no","harstad.no","hasvik.no","aknoluokta.no","ákŋoluokta.no","hattfjelldal.no","aarborte.no","haugesund.no","hemne.no","hemnes.no","hemsedal.no","heroy.more-og-romsdal.no","herøy.møre-og-romsdal.no","heroy.nordland.no","herøy.nordland.no","hitra.no","hjartdal.no","hjelmeland.no","hobol.no","hobøl.no","hof.no","hol.no","hole.no","holmestrand.no","holtalen.no","holtålen.no","hornindal.no","horten.no","hurdal.no","hurum.no","hvaler.no","hyllestad.no","hagebostad.no","hægebostad.no","hoyanger.no","høyanger.no","hoylandet.no","høylandet.no","ha.no","hå.no","ibestad.no","inderoy.no","inderøy.no","iveland.no","jevnaker.no","jondal.no","jolster.no","jølster.no","karasjok.no","karasjohka.no","kárášjohka.no","karlsoy.no","galsa.no","gálsá.no","karmoy.no","karmøy.no","kautokeino.no","guovdageaidnu.no","klepp.no","klabu.no","klæbu.no","kongsberg.no","kongsvinger.no","kragero.no","kragerø.no","kristiansand.no","kristiansund.no","krodsherad.no","krødsherad.no","kvalsund.no","rahkkeravju.no","ráhkkerávju.no","kvam.no","kvinesdal.no","kvinnherad.no","kviteseid.no","kvitsoy.no","kvitsøy.no","kvafjord.no","kvæfjord.no","giehtavuoatna.no","kvanangen.no","kvænangen.no","navuotna.no","návuotna.no","kafjord.no","kåfjord.no","gaivuotna.no","gáivuotna.no","larvik.no","lavangen.no","lavagis.no","loabat.no","loabát.no","lebesby.no","davvesiida.no","leikanger.no","leirfjord.no","leka.no","leksvik.no","lenvik.no","leangaviika.no","leaŋgaviika.no","lesja.no","levanger.no","lier.no","lierne.no","lillehammer.no","lillesand.no","lindesnes.no","lindas.no","lindås.no","lom.no","loppa.no","lahppi.no","láhppi.no","lund.no","lunner.no","luroy.no","lurøy.no","luster.no","lyngdal.no","lyngen.no","ivgu.no","lardal.no","lerdal.no","lærdal.no","lodingen.no","lødingen.no","lorenskog.no","lørenskog.no","loten.no","løten.no","malvik.no","masoy.no","måsøy.no","muosat.no","muosát.no","mandal.no","marker.no","marnardal.no","masfjorden.no","meland.no","meldal.no","melhus.no","meloy.no","meløy.no","meraker.no","meråker.no","moareke.no","moåreke.no","midsund.no","midtre-gauldal.no","modalen.no","modum.no","molde.no","moskenes.no","moss.no","mosvik.no","malselv.no","målselv.no","malatvuopmi.no","málatvuopmi.no","namdalseid.no","aejrie.no","namsos.no","namsskogan.no","naamesjevuemie.no","nååmesjevuemie.no","laakesvuemie.no","nannestad.no","narvik.no","narviika.no","naustdal.no","nedre-eiker.no","nes.akershus.no","nes.buskerud.no","nesna.no","nesodden.no","nesseby.no","unjarga.no","unjárga.no","nesset.no","nissedal.no","nittedal.no","nord-aurdal.no","nord-fron.no","nord-odal.no","norddal.no","nordkapp.no","davvenjarga.no","davvenjárga.no","nordre-land.no","nordreisa.no","raisa.no","ráisa.no","nore-og-uvdal.no","notodden.no","naroy.no","nærøy.no","notteroy.no","nøtterøy.no","odda.no","oksnes.no","øksnes.no","oppdal.no","oppegard.no","oppegård.no","orkdal.no","orland.no","ørland.no","orskog.no","ørskog.no","orsta.no","ørsta.no","os.hedmark.no","os.hordaland.no","osen.no","osteroy.no","osterøy.no","ostre-toten.no","østre-toten.no","overhalla.no","ovre-eiker.no","øvre-eiker.no","oyer.no","øyer.no","oygarden.no","øygarden.no","oystre-slidre.no","øystre-slidre.no","porsanger.no","porsangu.no","porsáŋgu.no","porsgrunn.no","radoy.no","radøy.no","rakkestad.no","rana.no","ruovat.no","randaberg.no","rauma.no","rendalen.no","rennebu.no","rennesoy.no","rennesøy.no","rindal.no","ringebu.no","ringerike.no","ringsaker.no","rissa.no","risor.no","risør.no","roan.no","rollag.no","rygge.no","ralingen.no","rælingen.no","rodoy.no","rødøy.no","romskog.no","rømskog.no","roros.no","røros.no","rost.no","røst.no","royken.no","røyken.no","royrvik.no","røyrvik.no","rade.no","råde.no","salangen.no","siellak.no","saltdal.no","salat.no","sálát.no","sálat.no","samnanger.no","sande.more-og-romsdal.no","sande.møre-og-romsdal.no","sande.vestfold.no","sandefjord.no","sandnes.no","sandoy.no","sandøy.no","sarpsborg.no","sauda.no","sauherad.no","sel.no","selbu.no","selje.no","seljord.no","sigdal.no","siljan.no","sirdal.no","skaun.no","skedsmo.no","ski.no","skien.no","skiptvet.no","skjervoy.no","skjervøy.no","skierva.no","skiervá.no","skjak.no","skjåk.no","skodje.no","skanland.no","skånland.no","skanit.no","skánit.no","smola.no","smøla.no","snillfjord.no","snasa.no","snåsa.no","snoasa.no","snaase.no","snåase.no","sogndal.no","sokndal.no","sola.no","solund.no","songdalen.no","sortland.no","spydeberg.no","stange.no","stavanger.no","steigen.no","steinkjer.no","stjordal.no","stjørdal.no","stokke.no","stor-elvdal.no","stord.no","stordal.no","storfjord.no","omasvuotna.no","strand.no","stranda.no","stryn.no","sula.no","suldal.no","sund.no","sunndal.no","surnadal.no","sveio.no","svelvik.no","sykkylven.no","sogne.no","søgne.no","somna.no","sømna.no","sondre-land.no","søndre-land.no","sor-aurdal.no","sør-aurdal.no","sor-fron.no","sør-fron.no","sor-odal.no","sør-odal.no","sor-varanger.no","sør-varanger.no","matta-varjjat.no","mátta-várjjat.no","sorfold.no","sørfold.no","sorreisa.no","sørreisa.no","sorum.no","sørum.no","tana.no","deatnu.no","time.no","tingvoll.no","tinn.no","tjeldsund.no","dielddanuorri.no","tjome.no","tjøme.no","tokke.no","tolga.no","torsken.no","tranoy.no","tranøy.no","tromso.no","tromsø.no","tromsa.no","romsa.no","trondheim.no","troandin.no","trysil.no","trana.no","træna.no","trogstad.no","trøgstad.no","tvedestrand.no","tydal.no","tynset.no","tysfjord.no","divtasvuodna.no","divttasvuotna.no","tysnes.no","tysvar.no","tysvær.no","tonsberg.no","tønsberg.no","ullensaker.no","ullensvang.no","ulvik.no","utsira.no","vadso.no","vadsø.no","cahcesuolo.no","čáhcesuolo.no","vaksdal.no","valle.no","vang.no","vanylven.no","vardo.no","vardø.no","varggat.no","várggát.no","vefsn.no","vaapste.no","vega.no","vegarshei.no","vegårshei.no","vennesla.no","verdal.no","verran.no","vestby.no","vestnes.no","vestre-slidre.no","vestre-toten.no","vestvagoy.no","vestvågøy.no","vevelstad.no","vik.no","vikna.no","vindafjord.no","volda.no","voss.no","varoy.no","værøy.no","vagan.no","vågan.no","voagat.no","vagsoy.no","vågsøy.no","vaga.no","vågå.no","valer.ostfold.no","våler.østfold.no","valer.hedmark.no","våler.hedmark.no","*.np","nr","biz.nr","info.nr","gov.nr","edu.nr","org.nr","net.nr","com.nr","nu","nz","ac.nz","co.nz","cri.nz","geek.nz","gen.nz","govt.nz","health.nz","iwi.nz","kiwi.nz","maori.nz","mil.nz","māori.nz","net.nz","org.nz","parliament.nz","school.nz","om","co.om","com.om","edu.om","gov.om","med.om","museum.om","net.om","org.om","pro.om","onion","org","pa","ac.pa","gob.pa","com.pa","org.pa","sld.pa","edu.pa","net.pa","ing.pa","abo.pa","med.pa","nom.pa","pe","edu.pe","gob.pe","nom.pe","mil.pe","org.pe","com.pe","net.pe","pf","com.pf","org.pf","edu.pf","*.pg","ph","com.ph","net.ph","org.ph","gov.ph","edu.ph","ngo.ph","mil.ph","i.ph","pk","com.pk","net.pk","edu.pk","org.pk","fam.pk","biz.pk","web.pk","gov.pk","gob.pk","gok.pk","gon.pk","gop.pk","gos.pk","info.pk","pl","com.pl","net.pl","org.pl","aid.pl","agro.pl","atm.pl","auto.pl","biz.pl","edu.pl","gmina.pl","gsm.pl","info.pl","mail.pl","miasta.pl","media.pl","mil.pl","nieruchomosci.pl","nom.pl","pc.pl","powiat.pl","priv.pl","realestate.pl","rel.pl","sex.pl","shop.pl","sklep.pl","sos.pl","szkola.pl","targi.pl","tm.pl","tourism.pl","travel.pl","turystyka.pl","gov.pl","ap.gov.pl","ic.gov.pl","is.gov.pl","us.gov.pl","kmpsp.gov.pl","kppsp.gov.pl","kwpsp.gov.pl","psp.gov.pl","wskr.gov.pl","kwp.gov.pl","mw.gov.pl","ug.gov.pl","um.gov.pl","umig.gov.pl","ugim.gov.pl","upow.gov.pl","uw.gov.pl","starostwo.gov.pl","pa.gov.pl","po.gov.pl","psse.gov.pl","pup.gov.pl","rzgw.gov.pl","sa.gov.pl","so.gov.pl","sr.gov.pl","wsa.gov.pl","sko.gov.pl","uzs.gov.pl","wiih.gov.pl","winb.gov.pl","pinb.gov.pl","wios.gov.pl","witd.gov.pl","wzmiuw.gov.pl","piw.gov.pl","wiw.gov.pl","griw.gov.pl","wif.gov.pl","oum.gov.pl","sdn.gov.pl","zp.gov.pl","uppo.gov.pl","mup.gov.pl","wuoz.gov.pl","konsulat.gov.pl","oirm.gov.pl","augustow.pl","babia-gora.pl","bedzin.pl","beskidy.pl","bialowieza.pl","bialystok.pl","bielawa.pl","bieszczady.pl","boleslawiec.pl","bydgoszcz.pl","bytom.pl","cieszyn.pl","czeladz.pl","czest.pl","dlugoleka.pl","elblag.pl","elk.pl","glogow.pl","gniezno.pl","gorlice.pl","grajewo.pl","ilawa.pl","jaworzno.pl","jelenia-gora.pl","jgora.pl","kalisz.pl","kazimierz-dolny.pl","karpacz.pl","kartuzy.pl","kaszuby.pl","katowice.pl","kepno.pl","ketrzyn.pl","klodzko.pl","kobierzyce.pl","kolobrzeg.pl","konin.pl","konskowola.pl","kutno.pl","lapy.pl","lebork.pl","legnica.pl","lezajsk.pl","limanowa.pl","lomza.pl","lowicz.pl","lubin.pl","lukow.pl","malbork.pl","malopolska.pl","mazowsze.pl","mazury.pl","mielec.pl","mielno.pl","mragowo.pl","naklo.pl","nowaruda.pl","nysa.pl","olawa.pl","olecko.pl","olkusz.pl","olsztyn.pl","opoczno.pl","opole.pl","ostroda.pl","ostroleka.pl","ostrowiec.pl","ostrowwlkp.pl","pila.pl","pisz.pl","podhale.pl","podlasie.pl","polkowice.pl","pomorze.pl","pomorskie.pl","prochowice.pl","pruszkow.pl","przeworsk.pl","pulawy.pl","radom.pl","rawa-maz.pl","rybnik.pl","rzeszow.pl","sanok.pl","sejny.pl","slask.pl","slupsk.pl","sosnowiec.pl","stalowa-wola.pl","skoczow.pl","starachowice.pl","stargard.pl","suwalki.pl","swidnica.pl","swiebodzin.pl","swinoujscie.pl","szczecin.pl","szczytno.pl","tarnobrzeg.pl","tgory.pl","turek.pl","tychy.pl","ustka.pl","walbrzych.pl","warmia.pl","warszawa.pl","waw.pl","wegrow.pl","wielun.pl","wlocl.pl","wloclawek.pl","wodzislaw.pl","wolomin.pl","wroclaw.pl","zachpomor.pl","zagan.pl","zarow.pl","zgora.pl","zgorzelec.pl","pm","pn","gov.pn","co.pn","org.pn","edu.pn","net.pn","post","pr","com.pr","net.pr","org.pr","gov.pr","edu.pr","isla.pr","pro.pr","biz.pr","info.pr","name.pr","est.pr","prof.pr","ac.pr","pro","aaa.pro","aca.pro","acct.pro","avocat.pro","bar.pro","cpa.pro","eng.pro","jur.pro","law.pro","med.pro","recht.pro","ps","edu.ps","gov.ps","sec.ps","plo.ps","com.ps","org.ps","net.ps","pt","net.pt","gov.pt","org.pt","edu.pt","int.pt","publ.pt","com.pt","nome.pt","pw","co.pw","ne.pw","or.pw","ed.pw","go.pw","belau.pw","py","com.py","coop.py","edu.py","gov.py","mil.py","net.py","org.py","qa","com.qa","edu.qa","gov.qa","mil.qa","name.qa","net.qa","org.qa","sch.qa","re","asso.re","com.re","nom.re","ro","arts.ro","com.ro","firm.ro","info.ro","nom.ro","nt.ro","org.ro","rec.ro","store.ro","tm.ro","www.ro","rs","ac.rs","co.rs","edu.rs","gov.rs","in.rs","org.rs","ru","ac.ru","edu.ru","gov.ru","int.ru","mil.ru","test.ru","rw","gov.rw","net.rw","edu.rw","ac.rw","com.rw","co.rw","int.rw","mil.rw","gouv.rw","sa","com.sa","net.sa","org.sa","gov.sa","med.sa","pub.sa","edu.sa","sch.sa","sb","com.sb","edu.sb","gov.sb","net.sb","org.sb","sc","com.sc","gov.sc","net.sc","org.sc","edu.sc","sd","com.sd","net.sd","org.sd","edu.sd","med.sd","tv.sd","gov.sd","info.sd","se","a.se","ac.se","b.se","bd.se","brand.se","c.se","d.se","e.se","f.se","fh.se","fhsk.se","fhv.se","g.se","h.se","i.se","k.se","komforb.se","kommunalforbund.se","komvux.se","l.se","lanbib.se","m.se","n.se","naturbruksgymn.se","o.se","org.se","p.se","parti.se","pp.se","press.se","r.se","s.se","t.se","tm.se","u.se","w.se","x.se","y.se","z.se","sg","com.sg","net.sg","org.sg","gov.sg","edu.sg","per.sg","sh","com.sh","net.sh","gov.sh","org.sh","mil.sh","si","sj","sk","sl","com.sl","net.sl","edu.sl","gov.sl","org.sl","sm","sn","art.sn","com.sn","edu.sn","gouv.sn","org.sn","perso.sn","univ.sn","so","com.so","net.so","org.so","sr","st","co.st","com.st","consulado.st","edu.st","embaixada.st","gov.st","mil.st","net.st","org.st","principe.st","saotome.st","store.st","su","sv","com.sv","edu.sv","gob.sv","org.sv","red.sv","sx","gov.sx","sy","edu.sy","gov.sy","net.sy","mil.sy","com.sy","org.sy","sz","co.sz","ac.sz","org.sz","tc","td","tel","tf","tg","th","ac.th","co.th","go.th","in.th","mi.th","net.th","or.th","tj","ac.tj","biz.tj","co.tj","com.tj","edu.tj","go.tj","gov.tj","int.tj","mil.tj","name.tj","net.tj","nic.tj","org.tj","test.tj","web.tj","tk","tl","gov.tl","tm","com.tm","co.tm","org.tm","net.tm","nom.tm","gov.tm","mil.tm","edu.tm","tn","com.tn","ens.tn","fin.tn","gov.tn","ind.tn","intl.tn","nat.tn","net.tn","org.tn","info.tn","perso.tn","tourism.tn","edunet.tn","rnrt.tn","rns.tn","rnu.tn","mincom.tn","agrinet.tn","defense.tn","turen.tn","to","com.to","gov.to","net.to","org.to","edu.to","mil.to","tr","com.tr","info.tr","biz.tr","net.tr","org.tr","web.tr","gen.tr","tv.tr","av.tr","dr.tr","bbs.tr","name.tr","tel.tr","gov.tr","bel.tr","pol.tr","mil.tr","k12.tr","edu.tr","kep.tr","nc.tr","gov.nc.tr","tt","co.tt","com.tt","org.tt","net.tt","biz.tt","info.tt","pro.tt","int.tt","coop.tt","jobs.tt","mobi.tt","travel.tt","museum.tt","aero.tt","name.tt","gov.tt","edu.tt","tv","tw","edu.tw","gov.tw","mil.tw","com.tw","net.tw","org.tw","idv.tw","game.tw","ebiz.tw","club.tw","網路.tw","組織.tw","商業.tw","tz","ac.tz","co.tz","go.tz","hotel.tz","info.tz","me.tz","mil.tz","mobi.tz","ne.tz","or.tz","sc.tz","tv.tz","ua","com.ua","edu.ua","gov.ua","in.ua","net.ua","org.ua","cherkassy.ua","cherkasy.ua","chernigov.ua","chernihiv.ua","chernivtsi.ua","chernovtsy.ua","ck.ua","cn.ua","cr.ua","crimea.ua","cv.ua","dn.ua","dnepropetrovsk.ua","dnipropetrovsk.ua","dominic.ua","donetsk.ua","dp.ua","if.ua","ivano-frankivsk.ua","kh.ua","kharkiv.ua","kharkov.ua","kherson.ua","khmelnitskiy.ua","khmelnytskyi.ua","kiev.ua","kirovograd.ua","km.ua","kr.ua","krym.ua","ks.ua","kv.ua","kyiv.ua","lg.ua","lt.ua","lugansk.ua","lutsk.ua","lv.ua","lviv.ua","mk.ua","mykolaiv.ua","nikolaev.ua","od.ua","odesa.ua","odessa.ua","pl.ua","poltava.ua","rivne.ua","rovno.ua","rv.ua","sb.ua","sebastopol.ua","sevastopol.ua","sm.ua","sumy.ua","te.ua","ternopil.ua","uz.ua","uzhgorod.ua","vinnica.ua","vinnytsia.ua","vn.ua","volyn.ua","yalta.ua","zaporizhzhe.ua","zaporizhzhia.ua","zhitomir.ua","zhytomyr.ua","zp.ua","zt.ua","ug","co.ug","or.ug","ac.ug","sc.ug","go.ug","ne.ug","com.ug","org.ug","uk","ac.uk","co.uk","gov.uk","ltd.uk","me.uk","net.uk","nhs.uk","org.uk","plc.uk","police.uk","*.sch.uk","us","dni.us","fed.us","isa.us","kids.us","nsn.us","ak.us","al.us","ar.us","as.us","az.us","ca.us","co.us","ct.us","dc.us","de.us","fl.us","ga.us","gu.us","hi.us","ia.us","id.us","il.us","in.us","ks.us","ky.us","la.us","ma.us","md.us","me.us","mi.us","mn.us","mo.us","ms.us","mt.us","nc.us","nd.us","ne.us","nh.us","nj.us","nm.us","nv.us","ny.us","oh.us","ok.us","or.us","pa.us","pr.us","ri.us","sc.us","sd.us","tn.us","tx.us","ut.us","vi.us","vt.us","va.us","wa.us","wi.us","wv.us","wy.us","k12.ak.us","k12.al.us","k12.ar.us","k12.as.us","k12.az.us","k12.ca.us","k12.co.us","k12.ct.us","k12.dc.us","k12.de.us","k12.fl.us","k12.ga.us","k12.gu.us","k12.ia.us","k12.id.us","k12.il.us","k12.in.us","k12.ks.us","k12.ky.us","k12.la.us","k12.ma.us","k12.md.us","k12.me.us","k12.mi.us","k12.mn.us","k12.mo.us","k12.ms.us","k12.mt.us","k12.nc.us","k12.ne.us","k12.nh.us","k12.nj.us","k12.nm.us","k12.nv.us","k12.ny.us","k12.oh.us","k12.ok.us","k12.or.us","k12.pa.us","k12.pr.us","k12.ri.us","k12.sc.us","k12.tn.us","k12.tx.us","k12.ut.us","k12.vi.us","k12.vt.us","k12.va.us","k12.wa.us","k12.wi.us","k12.wy.us","cc.ak.us","cc.al.us","cc.ar.us","cc.as.us","cc.az.us","cc.ca.us","cc.co.us","cc.ct.us","cc.dc.us","cc.de.us","cc.fl.us","cc.ga.us","cc.gu.us","cc.hi.us","cc.ia.us","cc.id.us","cc.il.us","cc.in.us","cc.ks.us","cc.ky.us","cc.la.us","cc.ma.us","cc.md.us","cc.me.us","cc.mi.us","cc.mn.us","cc.mo.us","cc.ms.us","cc.mt.us","cc.nc.us","cc.nd.us","cc.ne.us","cc.nh.us","cc.nj.us","cc.nm.us","cc.nv.us","cc.ny.us","cc.oh.us","cc.ok.us","cc.or.us","cc.pa.us","cc.pr.us","cc.ri.us","cc.sc.us","cc.sd.us","cc.tn.us","cc.tx.us","cc.ut.us","cc.vi.us","cc.vt.us","cc.va.us","cc.wa.us","cc.wi.us","cc.wv.us","cc.wy.us","lib.ak.us","lib.al.us","lib.ar.us","lib.as.us","lib.az.us","lib.ca.us","lib.co.us","lib.ct.us","lib.dc.us","lib.fl.us","lib.ga.us","lib.gu.us","lib.hi.us","lib.ia.us","lib.id.us","lib.il.us","lib.in.us","lib.ks.us","lib.ky.us","lib.la.us","lib.ma.us","lib.md.us","lib.me.us","lib.mi.us","lib.mn.us","lib.mo.us","lib.ms.us","lib.mt.us","lib.nc.us","lib.nd.us","lib.ne.us","lib.nh.us","lib.nj.us","lib.nm.us","lib.nv.us","lib.ny.us","lib.oh.us","lib.ok.us","lib.or.us","lib.pa.us","lib.pr.us","lib.ri.us","lib.sc.us","lib.sd.us","lib.tn.us","lib.tx.us","lib.ut.us","lib.vi.us","lib.vt.us","lib.va.us","lib.wa.us","lib.wi.us","lib.wy.us","pvt.k12.ma.us","chtr.k12.ma.us","paroch.k12.ma.us","ann-arbor.mi.us","cog.mi.us","dst.mi.us","eaton.mi.us","gen.mi.us","mus.mi.us","tec.mi.us","washtenaw.mi.us","uy","com.uy","edu.uy","gub.uy","mil.uy","net.uy","org.uy","uz","co.uz","com.uz","net.uz","org.uz","va","vc","com.vc","net.vc","org.vc","gov.vc","mil.vc","edu.vc","ve","arts.ve","co.ve","com.ve","e12.ve","edu.ve","firm.ve","gob.ve","gov.ve","info.ve","int.ve","mil.ve","net.ve","org.ve","rec.ve","store.ve","tec.ve","web.ve","vg","vi","co.vi","com.vi","k12.vi","net.vi","org.vi","vn","com.vn","net.vn","org.vn","edu.vn","gov.vn","int.vn","ac.vn","biz.vn","info.vn","name.vn","pro.vn","health.vn","vu","com.vu","edu.vu","net.vu","org.vu","wf","ws","com.ws","net.ws","org.ws","gov.ws","edu.ws","yt","امارات","հայ","বাংলা","бг","бел","中国","中國","الجزائر","مصر","ею","გე","ελ","香港","公司.香港","教育.香港","政府.香港","個人.香港","網絡.香港","組織.香港","ಭಾರತ","ଭାରତ","ভাৰত","भारतम्","भारोत","ڀارت","ഭാരതം","भारत","بارت","بھارت","భారత్","ભારત","ਭਾਰਤ","ভারত","இந்தியா","ایران","ايران","عراق","الاردن","한국","қаз","ලංකා","இலங்கை","المغرب","мкд","мон","澳門","澳门","مليسيا","عمان","پاکستان","پاكستان","فلسطين","срб","пр.срб","орг.срб","обр.срб","од.срб","упр.срб","ак.срб","рф","قطر","السعودية","السعودیة","السعودیۃ","السعوديه","سودان","新加坡","சிங்கப்பூர்","سورية","سوريا","ไทย","ศึกษา.ไทย","ธุรกิจ.ไทย","รัฐบาล.ไทย","ทหาร.ไทย","เน็ต.ไทย","องค์กร.ไทย","تونس","台灣","台湾","臺灣","укр","اليمن","xxx","*.ye","ac.za","agric.za","alt.za","co.za","edu.za","gov.za","grondar.za","law.za","mil.za","net.za","ngo.za","nis.za","nom.za","org.za","school.za","tm.za","web.za","zm","ac.zm","biz.zm","co.zm","com.zm","edu.zm","gov.zm","info.zm","mil.zm","net.zm","org.zm","sch.zm","zw","ac.zw","co.zw","gov.zw","mil.zw","org.zw","aaa","aarp","abarth","abb","abbott","abbvie","abc","able","abogado","abudhabi","academy","accenture","accountant","accountants","aco","active","actor","adac","ads","adult","aeg","aetna","afamilycompany","afl","africa","agakhan","agency","aig","aigo","airbus","airforce","airtel","akdn","alfaromeo","alibaba","alipay","allfinanz","allstate","ally","alsace","alstom","americanexpress","americanfamily","amex","amfam","amica","amsterdam","analytics","android","anquan","anz","aol","apartments","app","apple","aquarelle","arab","aramco","archi","army","art","arte","asda","associates","athleta","attorney","auction","audi","audible","audio","auspost","author","auto","autos","avianca","aws","axa","azure","baby","baidu","banamex","bananarepublic","band","bank","bar","barcelona","barclaycard","barclays","barefoot","bargains","baseball","basketball","bauhaus","bayern","bbc","bbt","bbva","bcg","bcn","beats","beauty","beer","bentley","berlin","best","bestbuy","bet","bharti","bible","bid","bike","bing","bingo","bio","black","blackfriday","blanco","blockbuster","blog","bloomberg","blue","bms","bmw","bnl","bnpparibas","boats","boehringer","bofa","bom","bond","boo","book","booking","bosch","bostik","boston","bot","boutique","box","bradesco","bridgestone","broadway","broker","brother","brussels","budapest","bugatti","build","builders","business","buy","buzz","bzh","cab","cafe","cal","call","calvinklein","cam","camera","camp","cancerresearch","canon","capetown","capital","capitalone","car","caravan","cards","care","career","careers","cars","cartier","casa","case","caseih","cash","casino","catering","catholic","cba","cbn","cbre","cbs","ceb","center","ceo","cern","cfa","cfd","chanel","channel","charity","chase","chat","cheap","chintai","christmas","chrome","chrysler","church","cipriani","circle","cisco","citadel","citi","citic","city","cityeats","claims","cleaning","click","clinic","clinique","clothing","cloud","club","clubmed","coach","codes","coffee","college","cologne","comcast","commbank","community","company","compare","computer","comsec","condos","construction","consulting","contact","contractors","cooking","cookingchannel","cool","corsica","country","coupon","coupons","courses","credit","creditcard","creditunion","cricket","crown","crs","cruise","cruises","csc","cuisinella","cymru","cyou","dabur","dad","dance","data","date","dating","datsun","day","dclk","dds","deal","dealer","deals","degree","delivery","dell","deloitte","delta","democrat","dental","dentist","desi","design","dev","dhl","diamonds","diet","digital","direct","directory","discount","discover","dish","diy","dnp","docs","doctor","dodge","dog","doha","domains","dot","download","drive","dtv","dubai","duck","dunlop","duns","dupont","durban","dvag","dvr","earth","eat","eco","edeka","education","email","emerck","energy","engineer","engineering","enterprises","epost","epson","equipment","ericsson","erni","esq","estate","esurance","etisalat","eurovision","eus","events","everbank","exchange","expert","exposed","express","extraspace","fage","fail","fairwinds","faith","family","fan","fans","farm","farmers","fashion","fast","fedex","feedback","ferrari","ferrero","fiat","fidelity","fido","film","final","finance","financial","fire","firestone","firmdale","fish","fishing","fit","fitness","flickr","flights","flir","florist","flowers","fly","foo","food","foodnetwork","football","ford","forex","forsale","forum","foundation","fox","free","fresenius","frl","frogans","frontdoor","frontier","ftr","fujitsu","fujixerox","fun","fund","furniture","futbol","fyi","gal","gallery","gallo","gallup","game","games","gap","garden","gbiz","gdn","gea","gent","genting","george","ggee","gift","gifts","gives","giving","glade","glass","gle","global","globo","gmail","gmbh","gmo","gmx","godaddy","gold","goldpoint","golf","goo","goodyear","goog","google","gop","got","grainger","graphics","gratis","green","gripe","grocery","group","guardian","gucci","guge","guide","guitars","guru","hair","hamburg","hangout","haus","hbo","hdfc","hdfcbank","health","healthcare","help","helsinki","here","hermes","hgtv","hiphop","hisamitsu","hitachi","hiv","hkt","hockey","holdings","holiday","homedepot","homegoods","homes","homesense","honda","honeywell","horse","hospital","host","hosting","hot","hoteles","hotels","hotmail","house","how","hsbc","hughes","hyatt","hyundai","ibm","icbc","ice","icu","ieee","ifm","ikano","imamat","imdb","immo","immobilien","inc","industries","infiniti","ing","ink","institute","insurance","insure","intel","international","intuit","investments","ipiranga","irish","iselect","ismaili","ist","istanbul","itau","itv","iveco","jaguar","java","jcb","jcp","jeep","jetzt","jewelry","jio","jll","jmp","jnj","joburg","jot","joy","jpmorgan","jprs","juegos","juniper","kaufen","kddi","kerryhotels","kerrylogistics","kerryproperties","kfh","kia","kim","kinder","kindle","kitchen","kiwi","koeln","komatsu","kosher","kpmg","kpn","krd","kred","kuokgroup","kyoto","lacaixa","ladbrokes","lamborghini","lamer","lancaster","lancia","lancome","land","landrover","lanxess","lasalle","lat","latino","latrobe","law","lawyer","lds","lease","leclerc","lefrak","legal","lego","lexus","lgbt","liaison","lidl","life","lifeinsurance","lifestyle","lighting","like","lilly","limited","limo","lincoln","linde","link","lipsy","live","living","lixil","llc","loan","loans","locker","locus","loft","lol","london","lotte","lotto","love","lpl","lplfinancial","ltd","ltda","lundbeck","lupin","luxe","luxury","macys","madrid","maif","maison","makeup","man","management","mango","map","market","marketing","markets","marriott","marshalls","maserati","mattel","mba","mckinsey","med","media","meet","melbourne","meme","memorial","men","menu","merckmsd","metlife","miami","microsoft","mini","mint","mit","mitsubishi","mlb","mls","mma","mobile","mobily","moda","moe","moi","mom","monash","money","monster","mopar","mormon","mortgage","moscow","moto","motorcycles","mov","movie","movistar","msd","mtn","mtr","mutual","nab","nadex","nagoya","nationwide","natura","navy","nba","nec","netbank","netflix","network","neustar","new","newholland","news","next","nextdirect","nexus","nfl","ngo","nhk","nico","nike","nikon","ninja","nissan","nissay","nokia","northwesternmutual","norton","now","nowruz","nowtv","nra","nrw","ntt","nyc","obi","observer","off","office","okinawa","olayan","olayangroup","oldnavy","ollo","omega","one","ong","onl","online","onyourside","ooo","open","oracle","orange","organic","origins","osaka","otsuka","ott","ovh","page","panasonic","paris","pars","partners","parts","party","passagens","pay","pccw","pet","pfizer","pharmacy","phd","philips","phone","photo","photography","photos","physio","piaget","pics","pictet","pictures","pid","pin","ping","pink","pioneer","pizza","place","play","playstation","plumbing","plus","pnc","pohl","poker","politie","porn","pramerica","praxi","press","prime","prod","productions","prof","progressive","promo","properties","property","protection","pru","prudential","pub","pwc","qpon","quebec","quest","qvc","racing","radio","raid","read","realestate","realtor","realty","recipes","red","redstone","redumbrella","rehab","reise","reisen","reit","reliance","ren","rent","rentals","repair","report","republican","rest","restaurant","review","reviews","rexroth","rich","richardli","ricoh","rightathome","ril","rio","rip","rmit","rocher","rocks","rodeo","rogers","room","rsvp","rugby","ruhr","run","rwe","ryukyu","saarland","safe","safety","sakura","sale","salon","samsclub","samsung","sandvik","sandvikcoromant","sanofi","sap","sarl","sas","save","saxo","sbi","sbs","sca","scb","schaeffler","schmidt","scholarships","school","schule","schwarz","science","scjohnson","scor","scot","search","seat","secure","security","seek","select","sener","services","ses","seven","sew","sex","sexy","sfr","shangrila","sharp","shaw","shell","shia","shiksha","shoes","shop","shopping","shouji","show","showtime","shriram","silk","sina","singles","site","ski","skin","sky","skype","sling","smart","smile","sncf","soccer","social","softbank","software","sohu","solar","solutions","song","sony","soy","space","spiegel","sport","spot","spreadbetting","srl","srt","stada","staples","star","starhub","statebank","statefarm","statoil","stc","stcgroup","stockholm","storage","store","stream","studio","study","style","sucks","supplies","supply","support","surf","surgery","suzuki","swatch","swiftcover","swiss","sydney","symantec","systems","tab","taipei","talk","taobao","target","tatamotors","tatar","tattoo","tax","taxi","tci","tdk","team","tech","technology","telefonica","temasek","tennis","teva","thd","theater","theatre","tiaa","tickets","tienda","tiffany","tips","tires","tirol","tjmaxx","tjx","tkmaxx","tmall","today","tokyo","tools","top","toray","toshiba","total","tours","town","toyota","toys","trade","trading","training","travel","travelchannel","travelers","travelersinsurance","trust","trv","tube","tui","tunes","tushu","tvs","ubank","ubs","uconnect","unicom","university","uno","uol","ups","vacations","vana","vanguard","vegas","ventures","verisign","versicherung","vet","viajes","video","vig","viking","villas","vin","vip","virgin","visa","vision","vistaprint","viva","vivo","vlaanderen","vodka","volkswagen","volvo","vote","voting","voto","voyage","vuelos","wales","walmart","walter","wang","wanggou","warman","watch","watches","weather","weatherchannel","webcam","weber","website","wed","wedding","weibo","weir","whoswho","wien","wiki","williamhill","win","windows","wine","winners","wme","wolterskluwer","woodside","work","works","world","wow","wtc","wtf","xbox","xerox","xfinity","xihuan","xin","कॉम","セール","佛山","慈善","集团","在线","大众汽车","点看","คอม","八卦","موقع","公益","公司","香格里拉","网站","移动","我爱你","москва","католик","онлайн","сайт","联通","קום","时尚","微博","淡马锡","ファッション","орг","नेट","ストア","삼성","商标","商店","商城","дети","ポイント","新闻","工行","家電","كوم","中文网","中信","娱乐","谷歌","電訊盈科","购物","クラウド","通販","网店","संगठन","餐厅","网络","ком","诺基亚","食品","飞利浦","手表","手机","ارامكو","العليان","اتصالات","بازار","موبايلي","ابوظبي","كاثوليك","همراه","닷컴","政府","شبكة","بيتك","عرب","机构","组织机构","健康","招聘","рус","珠宝","大拿","みんな","グーグル","世界","書籍","网址","닷넷","コム","天主教","游戏","vermögensberater","vermögensberatung","企业","信息","嘉里大酒店","嘉里","广东","政务","xyz","yachts","yahoo","yamaxun","yandex","yodobashi","yoga","yokohama","you","youtube","yun","zappos","zara","zero","zip","zippo","zone","zuerich","cc.ua","inf.ua","ltd.ua","beep.pl","*.compute.estate","*.alces.network","alwaysdata.net","cloudfront.net","*.compute.amazonaws.com","*.compute-1.amazonaws.com","*.compute.amazonaws.com.cn","us-east-1.amazonaws.com","cn-north-1.eb.amazonaws.com.cn","cn-northwest-1.eb.amazonaws.com.cn","elasticbeanstalk.com","ap-northeast-1.elasticbeanstalk.com","ap-northeast-2.elasticbeanstalk.com","ap-northeast-3.elasticbeanstalk.com","ap-south-1.elasticbeanstalk.com","ap-southeast-1.elasticbeanstalk.com","ap-southeast-2.elasticbeanstalk.com","ca-central-1.elasticbeanstalk.com","eu-central-1.elasticbeanstalk.com","eu-west-1.elasticbeanstalk.com","eu-west-2.elasticbeanstalk.com","eu-west-3.elasticbeanstalk.com","sa-east-1.elasticbeanstalk.com","us-east-1.elasticbeanstalk.com","us-east-2.elasticbeanstalk.com","us-gov-west-1.elasticbeanstalk.com","us-west-1.elasticbeanstalk.com","us-west-2.elasticbeanstalk.com","*.elb.amazonaws.com","*.elb.amazonaws.com.cn","s3.amazonaws.com","s3-ap-northeast-1.amazonaws.com","s3-ap-northeast-2.amazonaws.com","s3-ap-south-1.amazonaws.com","s3-ap-southeast-1.amazonaws.com","s3-ap-southeast-2.amazonaws.com","s3-ca-central-1.amazonaws.com","s3-eu-central-1.amazonaws.com","s3-eu-west-1.amazonaws.com","s3-eu-west-2.amazonaws.com","s3-eu-west-3.amazonaws.com","s3-external-1.amazonaws.com","s3-fips-us-gov-west-1.amazonaws.com","s3-sa-east-1.amazonaws.com","s3-us-gov-west-1.amazonaws.com","s3-us-east-2.amazonaws.com","s3-us-west-1.amazonaws.com","s3-us-west-2.amazonaws.com","s3.ap-northeast-2.amazonaws.com","s3.ap-south-1.amazonaws.com","s3.cn-north-1.amazonaws.com.cn","s3.ca-central-1.amazonaws.com","s3.eu-central-1.amazonaws.com","s3.eu-west-2.amazonaws.com","s3.eu-west-3.amazonaws.com","s3.us-east-2.amazonaws.com","s3.dualstack.ap-northeast-1.amazonaws.com","s3.dualstack.ap-northeast-2.amazonaws.com","s3.dualstack.ap-south-1.amazonaws.com","s3.dualstack.ap-southeast-1.amazonaws.com","s3.dualstack.ap-southeast-2.amazonaws.com","s3.dualstack.ca-central-1.amazonaws.com","s3.dualstack.eu-central-1.amazonaws.com","s3.dualstack.eu-west-1.amazonaws.com","s3.dualstack.eu-west-2.amazonaws.com","s3.dualstack.eu-west-3.amazonaws.com","s3.dualstack.sa-east-1.amazonaws.com","s3.dualstack.us-east-1.amazonaws.com","s3.dualstack.us-east-2.amazonaws.com","s3-website-us-east-1.amazonaws.com","s3-website-us-west-1.amazonaws.com","s3-website-us-west-2.amazonaws.com","s3-website-ap-northeast-1.amazonaws.com","s3-website-ap-southeast-1.amazonaws.com","s3-website-ap-southeast-2.amazonaws.com","s3-website-eu-west-1.amazonaws.com","s3-website-sa-east-1.amazonaws.com","s3-website.ap-northeast-2.amazonaws.com","s3-website.ap-south-1.amazonaws.com","s3-website.ca-central-1.amazonaws.com","s3-website.eu-central-1.amazonaws.com","s3-website.eu-west-2.amazonaws.com","s3-website.eu-west-3.amazonaws.com","s3-website.us-east-2.amazonaws.com","t3l3p0rt.net","tele.amune.org","apigee.io","on-aptible.com","user.party.eus","pimienta.org","poivron.org","potager.org","sweetpepper.org","myasustor.com","myfritz.net","*.awdev.ca","*.advisor.ws","backplaneapp.io","betainabox.com","bnr.la","blackbaudcdn.net","boomla.net","boxfuse.io","square7.ch","bplaced.com","bplaced.de","square7.de","bplaced.net","square7.net","browsersafetymark.io","mycd.eu","ae.org","ar.com","br.com","cn.com","com.de","com.se","de.com","eu.com","gb.com","gb.net","hu.com","hu.net","jp.net","jpn.com","kr.com","mex.com","no.com","qc.com","ru.com","sa.com","se.net","uk.com","uk.net","us.com","uy.com","za.bz","za.com","africa.com","gr.com","in.net","us.org","co.com","c.la","certmgr.org","xenapponazure.com","virtueeldomein.nl","cleverapps.io","c66.me","cloud66.ws","jdevcloud.com","wpdevcloud.com","cloudaccess.host","freesite.host","cloudaccess.net","cloudcontrolled.com","cloudcontrolapp.com","co.ca","*.otap.co","co.cz","c.cdn77.org","cdn77-ssl.net","r.cdn77.net","rsc.cdn77.org","ssl.origin.cdn77-secure.org","cloudns.asia","cloudns.biz","cloudns.club","cloudns.cc","cloudns.eu","cloudns.in","cloudns.info","cloudns.org","cloudns.pro","cloudns.pw","cloudns.us","cloudeity.net","cnpy.gdn","co.nl","co.no","webhosting.be","hosting-cluster.nl","dyn.cosidns.de","dynamisches-dns.de","dnsupdater.de","internet-dns.de","l-o-g-i-n.de","dynamic-dns.info","feste-ip.net","knx-server.net","static-access.net","realm.cz","*.cryptonomic.net","cupcake.is","cyon.link","cyon.site","daplie.me","localhost.daplie.me","dattolocal.com","dattorelay.com","dattoweb.com","mydatto.com","dattolocal.net","mydatto.net","biz.dk","co.dk","firm.dk","reg.dk","store.dk","debian.net","dedyn.io","dnshome.de","drayddns.com","dreamhosters.com","mydrobo.com","drud.io","drud.us","duckdns.org","dy.fi","tunk.org","dyndns-at-home.com","dyndns-at-work.com","dyndns-blog.com","dyndns-free.com","dyndns-home.com","dyndns-ip.com","dyndns-mail.com","dyndns-office.com","dyndns-pics.com","dyndns-remote.com","dyndns-server.com","dyndns-web.com","dyndns-wiki.com","dyndns-work.com","dyndns.biz","dyndns.info","dyndns.org","dyndns.tv","at-band-camp.net","ath.cx","barrel-of-knowledge.info","barrell-of-knowledge.info","better-than.tv","blogdns.com","blogdns.net","blogdns.org","blogsite.org","boldlygoingnowhere.org","broke-it.net","buyshouses.net","cechire.com","dnsalias.com","dnsalias.net","dnsalias.org","dnsdojo.com","dnsdojo.net","dnsdojo.org","does-it.net","doesntexist.com","doesntexist.org","dontexist.com","dontexist.net","dontexist.org","doomdns.com","doomdns.org","dvrdns.org","dyn-o-saur.com","dynalias.com","dynalias.net","dynalias.org","dynathome.net","dyndns.ws","endofinternet.net","endofinternet.org","endoftheinternet.org","est-a-la-maison.com","est-a-la-masion.com","est-le-patron.com","est-mon-blogueur.com","for-better.biz","for-more.biz","for-our.info","for-some.biz","for-the.biz","forgot.her.name","forgot.his.name","from-ak.com","from-al.com","from-ar.com","from-az.net","from-ca.com","from-co.net","from-ct.com","from-dc.com","from-de.com","from-fl.com","from-ga.com","from-hi.com","from-ia.com","from-id.com","from-il.com","from-in.com","from-ks.com","from-ky.com","from-la.net","from-ma.com","from-md.com","from-me.org","from-mi.com","from-mn.com","from-mo.com","from-ms.com","from-mt.com","from-nc.com","from-nd.com","from-ne.com","from-nh.com","from-nj.com","from-nm.com","from-nv.com","from-ny.net","from-oh.com","from-ok.com","from-or.com","from-pa.com","from-pr.com","from-ri.com","from-sc.com","from-sd.com","from-tn.com","from-tx.com","from-ut.com","from-va.com","from-vt.com","from-wa.com","from-wi.com","from-wv.com","from-wy.com","ftpaccess.cc","fuettertdasnetz.de","game-host.org","game-server.cc","getmyip.com","gets-it.net","go.dyndns.org","gotdns.com","gotdns.org","groks-the.info","groks-this.info","ham-radio-op.net","here-for-more.info","hobby-site.com","hobby-site.org","home.dyndns.org","homedns.org","homeftp.net","homeftp.org","homeip.net","homelinux.com","homelinux.net","homelinux.org","homeunix.com","homeunix.net","homeunix.org","iamallama.com","in-the-band.net","is-a-anarchist.com","is-a-blogger.com","is-a-bookkeeper.com","is-a-bruinsfan.org","is-a-bulls-fan.com","is-a-candidate.org","is-a-caterer.com","is-a-celticsfan.org","is-a-chef.com","is-a-chef.net","is-a-chef.org","is-a-conservative.com","is-a-cpa.com","is-a-cubicle-slave.com","is-a-democrat.com","is-a-designer.com","is-a-doctor.com","is-a-financialadvisor.com","is-a-geek.com","is-a-geek.net","is-a-geek.org","is-a-green.com","is-a-guru.com","is-a-hard-worker.com","is-a-hunter.com","is-a-knight.org","is-a-landscaper.com","is-a-lawyer.com","is-a-liberal.com","is-a-libertarian.com","is-a-linux-user.org","is-a-llama.com","is-a-musician.com","is-a-nascarfan.com","is-a-nurse.com","is-a-painter.com","is-a-patsfan.org","is-a-personaltrainer.com","is-a-photographer.com","is-a-player.com","is-a-republican.com","is-a-rockstar.com","is-a-socialist.com","is-a-soxfan.org","is-a-student.com","is-a-teacher.com","is-a-techie.com","is-a-therapist.com","is-an-accountant.com","is-an-actor.com","is-an-actress.com","is-an-anarchist.com","is-an-artist.com","is-an-engineer.com","is-an-entertainer.com","is-by.us","is-certified.com","is-found.org","is-gone.com","is-into-anime.com","is-into-cars.com","is-into-cartoons.com","is-into-games.com","is-leet.com","is-lost.org","is-not-certified.com","is-saved.org","is-slick.com","is-uberleet.com","is-very-bad.org","is-very-evil.org","is-very-good.org","is-very-nice.org","is-very-sweet.org","is-with-theband.com","isa-geek.com","isa-geek.net","isa-geek.org","isa-hockeynut.com","issmarterthanyou.com","isteingeek.de","istmein.de","kicks-ass.net","kicks-ass.org","knowsitall.info","land-4-sale.us","lebtimnetz.de","leitungsen.de","likes-pie.com","likescandy.com","merseine.nu","mine.nu","misconfused.org","mypets.ws","myphotos.cc","neat-url.com","office-on-the.net","on-the-web.tv","podzone.net","podzone.org","readmyblog.org","saves-the-whales.com","scrapper-site.net","scrapping.cc","selfip.biz","selfip.com","selfip.info","selfip.net","selfip.org","sells-for-less.com","sells-for-u.com","sells-it.net","sellsyourhome.org","servebbs.com","servebbs.net","servebbs.org","serveftp.net","serveftp.org","servegame.org","shacknet.nu","simple-url.com","space-to-rent.com","stuff-4-sale.org","stuff-4-sale.us","teaches-yoga.com","thruhere.net","traeumtgerade.de","webhop.biz","webhop.info","webhop.net","webhop.org","worse-than.tv","writesthisblog.com","ddnss.de","dyn.ddnss.de","dyndns.ddnss.de","dyndns1.de","dyn-ip24.de","home-webserver.de","dyn.home-webserver.de","myhome-server.de","ddnss.org","definima.net","definima.io","bci.dnstrace.pro","ddnsfree.com","ddnsgeek.com","giize.com","gleeze.com","kozow.com","loseyourip.com","ooguy.com","theworkpc.com","casacam.net","dynu.net","accesscam.org","camdvr.org","freeddns.org","mywire.org","webredirect.org","myddns.rocks","blogsite.xyz","dynv6.net","e4.cz","mytuleap.com","enonic.io","customer.enonic.io","eu.org","al.eu.org","asso.eu.org","at.eu.org","au.eu.org","be.eu.org","bg.eu.org","ca.eu.org","cd.eu.org","ch.eu.org","cn.eu.org","cy.eu.org","cz.eu.org","de.eu.org","dk.eu.org","edu.eu.org","ee.eu.org","es.eu.org","fi.eu.org","fr.eu.org","gr.eu.org","hr.eu.org","hu.eu.org","ie.eu.org","il.eu.org","in.eu.org","int.eu.org","is.eu.org","it.eu.org","jp.eu.org","kr.eu.org","lt.eu.org","lu.eu.org","lv.eu.org","mc.eu.org","me.eu.org","mk.eu.org","mt.eu.org","my.eu.org","net.eu.org","ng.eu.org","nl.eu.org","no.eu.org","nz.eu.org","paris.eu.org","pl.eu.org","pt.eu.org","q-a.eu.org","ro.eu.org","ru.eu.org","se.eu.org","si.eu.org","sk.eu.org","tr.eu.org","uk.eu.org","us.eu.org","eu-1.evennode.com","eu-2.evennode.com","eu-3.evennode.com","eu-4.evennode.com","us-1.evennode.com","us-2.evennode.com","us-3.evennode.com","us-4.evennode.com","twmail.cc","twmail.net","twmail.org","mymailer.com.tw","url.tw","apps.fbsbx.com","ru.net","adygeya.ru","bashkiria.ru","bir.ru","cbg.ru","com.ru","dagestan.ru","grozny.ru","kalmykia.ru","kustanai.ru","marine.ru","mordovia.ru","msk.ru","mytis.ru","nalchik.ru","nov.ru","pyatigorsk.ru","spb.ru","vladikavkaz.ru","vladimir.ru","abkhazia.su","adygeya.su","aktyubinsk.su","arkhangelsk.su","armenia.su","ashgabad.su","azerbaijan.su","balashov.su","bashkiria.su","bryansk.su","bukhara.su","chimkent.su","dagestan.su","east-kazakhstan.su","exnet.su","georgia.su","grozny.su","ivanovo.su","jambyl.su","kalmykia.su","kaluga.su","karacol.su","karaganda.su","karelia.su","khakassia.su","krasnodar.su","kurgan.su","kustanai.su","lenug.su","mangyshlak.su","mordovia.su","msk.su","murmansk.su","nalchik.su","navoi.su","north-kazakhstan.su","nov.su","obninsk.su","penza.su","pokrovsk.su","sochi.su","spb.su","tashkent.su","termez.su","togliatti.su","troitsk.su","tselinograd.su","tula.su","tuva.su","vladikavkaz.su","vladimir.su","vologda.su","channelsdvr.net","fastlylb.net","map.fastlylb.net","freetls.fastly.net","map.fastly.net","a.prod.fastly.net","global.prod.fastly.net","a.ssl.fastly.net","b.ssl.fastly.net","global.ssl.fastly.net","fastpanel.direct","fastvps-server.com","fhapp.xyz","fedorainfracloud.org","fedorapeople.org","cloud.fedoraproject.org","app.os.fedoraproject.org","app.os.stg.fedoraproject.org","filegear.me","firebaseapp.com","flynnhub.com","flynnhosting.net","freebox-os.com","freeboxos.com","fbx-os.fr","fbxos.fr","freebox-os.fr","freeboxos.fr","freedesktop.org","*.futurecms.at","*.ex.futurecms.at","*.in.futurecms.at","futurehosting.at","futuremailing.at","*.ex.ortsinfo.at","*.kunden.ortsinfo.at","*.statics.cloud","service.gov.uk","github.io","githubusercontent.com","gitlab.io","homeoffice.gov.uk","ro.im","shop.ro","goip.de","*.0emm.com","appspot.com","blogspot.ae","blogspot.al","blogspot.am","blogspot.ba","blogspot.be","blogspot.bg","blogspot.bj","blogspot.ca","blogspot.cf","blogspot.ch","blogspot.cl","blogspot.co.at","blogspot.co.id","blogspot.co.il","blogspot.co.ke","blogspot.co.nz","blogspot.co.uk","blogspot.co.za","blogspot.com","blogspot.com.ar","blogspot.com.au","blogspot.com.br","blogspot.com.by","blogspot.com.co","blogspot.com.cy","blogspot.com.ee","blogspot.com.eg","blogspot.com.es","blogspot.com.mt","blogspot.com.ng","blogspot.com.tr","blogspot.com.uy","blogspot.cv","blogspot.cz","blogspot.de","blogspot.dk","blogspot.fi","blogspot.fr","blogspot.gr","blogspot.hk","blogspot.hr","blogspot.hu","blogspot.ie","blogspot.in","blogspot.is","blogspot.it","blogspot.jp","blogspot.kr","blogspot.li","blogspot.lt","blogspot.lu","blogspot.md","blogspot.mk","blogspot.mr","blogspot.mx","blogspot.my","blogspot.nl","blogspot.no","blogspot.pe","blogspot.pt","blogspot.qa","blogspot.re","blogspot.ro","blogspot.rs","blogspot.ru","blogspot.se","blogspot.sg","blogspot.si","blogspot.sk","blogspot.sn","blogspot.td","blogspot.tw","blogspot.ug","blogspot.vn","cloudfunctions.net","cloud.goog","codespot.com","googleapis.com","googlecode.com","pagespeedmobilizer.com","publishproxy.com","withgoogle.com","withyoutube.com","hashbang.sh","hasura.app","hasura-app.io","hepforge.org","herokuapp.com","herokussl.com","myravendb.com","ravendb.community","ravendb.me","development.run","ravendb.run","moonscale.net","iki.fi","biz.at","info.at","info.cx","ac.leg.br","al.leg.br","am.leg.br","ap.leg.br","ba.leg.br","ce.leg.br","df.leg.br","es.leg.br","go.leg.br","ma.leg.br","mg.leg.br","ms.leg.br","mt.leg.br","pa.leg.br","pb.leg.br","pe.leg.br","pi.leg.br","pr.leg.br","rj.leg.br","rn.leg.br","ro.leg.br","rr.leg.br","rs.leg.br","sc.leg.br","se.leg.br","sp.leg.br","to.leg.br","pixolino.com","ipifony.net","mein-iserv.de","test-iserv.de","myjino.ru","*.hosting.myjino.ru","*.landing.myjino.ru","*.spectrum.myjino.ru","*.vps.myjino.ru","*.triton.zone","*.cns.joyent.com","js.org","keymachine.de","knightpoint.systems","co.krd","edu.krd","git-repos.de","lcube-server.de","svn-repos.de","app.lmpm.com","linkitools.space","linkyard.cloud","linkyard-cloud.ch","we.bs","uklugs.org","glug.org.uk","lug.org.uk","lugs.org.uk","barsy.bg","barsy.co.uk","barsyonline.co.uk","barsycenter.com","barsyonline.com","barsy.club","barsy.de","barsy.eu","barsy.in","barsy.info","barsy.io","barsy.me","barsy.menu","barsy.mobi","barsy.net","barsy.online","barsy.org","barsy.pro","barsy.pub","barsy.shop","barsy.site","barsy.support","barsy.uk","*.magentosite.cloud","mayfirst.info","mayfirst.org","hb.cldmail.ru","miniserver.com","memset.net","cloud.metacentrum.cz","custom.metacentrum.cz","flt.cloud.muni.cz","usr.cloud.muni.cz","meteorapp.com","eu.meteorapp.com","co.pl","azurecontainer.io","azurewebsites.net","azure-mobile.net","cloudapp.net","mozilla-iot.org","bmoattachments.org","net.ru","org.ru","pp.ru","bitballoon.com","netlify.com","4u.com","ngrok.io","nh-serv.co.uk","nfshost.com","dnsking.ch","mypi.co","n4t.co","001www.com","ddnslive.com","myiphost.com","forumz.info","16-b.it","32-b.it","64-b.it","soundcast.me","tcp4.me","dnsup.net","hicam.net","now-dns.net","ownip.net","vpndns.net","dynserv.org","now-dns.org","x443.pw","now-dns.top","ntdll.top","freeddns.us","crafting.xyz","zapto.xyz","nsupdate.info","nerdpol.ovh","blogsyte.com","brasilia.me","cable-modem.org","ciscofreak.com","collegefan.org","couchpotatofries.org","damnserver.com","ddns.me","ditchyourip.com","dnsfor.me","dnsiskinky.com","dvrcam.info","dynns.com","eating-organic.net","fantasyleague.cc","geekgalaxy.com","golffan.us","health-carereform.com","homesecuritymac.com","homesecuritypc.com","hopto.me","ilovecollege.info","loginto.me","mlbfan.org","mmafan.biz","myactivedirectory.com","mydissent.net","myeffect.net","mymediapc.net","mypsx.net","mysecuritycamera.com","mysecuritycamera.net","mysecuritycamera.org","net-freaks.com","nflfan.org","nhlfan.net","no-ip.ca","no-ip.co.uk","no-ip.net","noip.us","onthewifi.com","pgafan.net","point2this.com","pointto.us","privatizehealthinsurance.net","quicksytes.com","read-books.org","securitytactics.com","serveexchange.com","servehumour.com","servep2p.com","servesarcasm.com","stufftoread.com","ufcfan.org","unusualperson.com","workisboring.com","3utilities.com","bounceme.net","ddns.net","ddnsking.com","gotdns.ch","hopto.org","myftp.biz","myftp.org","myvnc.com","no-ip.biz","no-ip.info","no-ip.org","noip.me","redirectme.net","servebeer.com","serveblog.net","servecounterstrike.com","serveftp.com","servegame.com","servehalflife.com","servehttp.com","serveirc.com","serveminecraft.net","servemp3.com","servepics.com","servequake.com","sytes.net","webhop.me","zapto.org","stage.nodeart.io","nodum.co","nodum.io","pcloud.host","nyc.mn","nom.ae","nom.af","nom.ai","nom.al","nym.by","nym.bz","nom.cl","nom.gd","nom.ge","nom.gl","nym.gr","nom.gt","nym.gy","nom.hn","nym.ie","nom.im","nom.ke","nym.kz","nym.la","nym.lc","nom.li","nym.li","nym.lt","nym.lu","nym.me","nom.mk","nym.mn","nym.mx","nom.nu","nym.nz","nym.pe","nym.pt","nom.pw","nom.qa","nym.ro","nom.rs","nom.si","nym.sk","nom.st","nym.su","nym.sx","nom.tj","nym.tw","nom.ug","nom.uy","nom.vc","nom.vg","cya.gg","cloudycluster.net","nid.io","opencraft.hosting","operaunite.com","outsystemscloud.com","ownprovider.com","own.pm","ox.rs","oy.lc","pgfog.com","pagefrontapp.com","art.pl","gliwice.pl","krakow.pl","poznan.pl","wroc.pl","zakopane.pl","pantheonsite.io","gotpantheon.com","mypep.link","on-web.fr","*.platform.sh","*.platformsh.site","xen.prgmr.com","priv.at","protonet.io","chirurgiens-dentistes-en-france.fr","byen.site","ras.ru","qa2.com","dev-myqnapcloud.com","alpha-myqnapcloud.com","myqnapcloud.com","*.quipelements.com","vapor.cloud","vaporcloud.io","rackmaze.com","rackmaze.net","rhcloud.com","resindevice.io","devices.resinstaging.io","hzc.io","wellbeingzone.eu","ptplus.fit","wellbeingzone.co.uk","sandcats.io","logoip.de","logoip.com","schokokeks.net","scrysec.com","firewall-gateway.com","firewall-gateway.de","my-gateway.de","my-router.de","spdns.de","spdns.eu","firewall-gateway.net","my-firewall.org","myfirewall.org","spdns.org","*.s5y.io","*.sensiosite.cloud","biz.ua","co.ua","pp.ua","shiftedit.io","myshopblocks.com","1kapp.com","appchizi.com","applinzi.com","sinaapp.com","vipsinaapp.com","bounty-full.com","alpha.bounty-full.com","beta.bounty-full.com","static.land","dev.static.land","sites.static.land","apps.lair.io","*.stolos.io","spacekit.io","customer.speedpartner.de","storj.farm","utwente.io","temp-dns.com","diskstation.me","dscloud.biz","dscloud.me","dscloud.mobi","dsmynas.com","dsmynas.net","dsmynas.org","familyds.com","familyds.net","familyds.org","i234.me","myds.me","synology.me","vpnplus.to","taifun-dns.de","gda.pl","gdansk.pl","gdynia.pl","med.pl","sopot.pl","gwiddle.co.uk","cust.dev.thingdust.io","cust.disrec.thingdust.io","cust.prod.thingdust.io","cust.testing.thingdust.io","bloxcms.com","townnews-staging.com","12hp.at","2ix.at","4lima.at","lima-city.at","12hp.ch","2ix.ch","4lima.ch","lima-city.ch","trafficplex.cloud","de.cool","12hp.de","2ix.de","4lima.de","lima-city.de","1337.pictures","clan.rip","lima-city.rocks","webspace.rocks","lima.zone","*.transurl.be","*.transurl.eu","*.transurl.nl","tuxfamily.org","dd-dns.de","diskstation.eu","diskstation.org","dray-dns.de","draydns.de","dyn-vpn.de","dynvpn.de","mein-vigor.de","my-vigor.de","my-wan.de","syno-ds.de","synology-diskstation.de","synology-ds.de","uber.space","*.uberspace.de","hk.com","hk.org","ltd.hk","inc.hk","virtualuser.de","virtual-user.de","lib.de.us","2038.io","router.management","v-info.info","wedeploy.io","wedeploy.me","wedeploy.sh","remotewd.com","wmflabs.org","half.host","xnbay.com","u2.xnbay.com","u2-local.xnbay.com","cistron.nl","demon.nl","xs4all.space","official.academy","yolasite.com","ybo.faith","yombo.me","homelink.one","ybo.party","ybo.review","ybo.science","ybo.trade","nohost.me","noho.st","za.net","za.org","now.sh","zone.id"]},function(e,t,a){"use strict"; /*! * Copyright (c) 2015, Salesforce.com, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * 3. Neither the name of Salesforce.com nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */var r=a(59).Store,i=a(60).permuteDomain,o=a(61).pathMatch,n=a(4);function s(){r.call(this),this.idx={}}n.inherits(s,r),t.MemoryCookieStore=s,s.prototype.idx=null,s.prototype.synchronous=!0,s.prototype.inspect=function(){return"{ idx: "+n.inspect(this.idx,!1,2)+" }"},n.inspect.custom&&(s.prototype[n.inspect.custom]=s.prototype.inspect),s.prototype.findCookie=function(e,t,a,r){return this.idx[e]&&this.idx[e][t]?r(null,this.idx[e][t][a]||null):r(null,void 0)},s.prototype.findCookies=function(e,t,a){var r,n=[];if(!e)return a(null,[]);r=t?function(e){Object.keys(e).forEach(function(a){if(o(t,a)){var r=e[a];for(var i in r)n.push(r[i])}})}:function(e){for(var t in e){var a=e[t];for(var r in a)n.push(a[r])}};var s=i(e)||[e],c=this.idx;s.forEach(function(e){var t=c[e];t&&r(t)}),a(null,n)},s.prototype.putCookie=function(e,t){this.idx[e.domain]||(this.idx[e.domain]={}),this.idx[e.domain][e.path]||(this.idx[e.domain][e.path]={}),this.idx[e.domain][e.path][e.key]=e,t(null)},s.prototype.updateCookie=function(e,t,a){this.putCookie(t,a)},s.prototype.removeCookie=function(e,t,a,r){this.idx[e]&&this.idx[e][t]&&this.idx[e][t][a]&&delete this.idx[e][t][a],r(null)},s.prototype.removeCookies=function(e,t,a){return this.idx[e]&&(t?delete this.idx[e][t]:delete this.idx[e]),a(null)},s.prototype.getAllCookies=function(e){var t=[],a=this.idx;Object.keys(a).forEach(function(e){Object.keys(a[e]).forEach(function(r){Object.keys(a[e][r]).forEach(function(i){null!==i&&t.push(a[e][r][i])})})}),t.sort(function(e,t){return(e.creationIndex||0)-(t.creationIndex||0)}),e(null,t)}},function(e){e.exports={_args:[["tough-cookie@2.4.3","/Users/davidboyne/Dev/MyProjects/github-actions"]],_from:"tough-cookie@2.4.3",_id:"tough-cookie@2.4.3",_inBundle:!1,_integrity:"sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",_location:"/tough-cookie",_phantomChildren:{},_requested:{type:"version",registry:!0,raw:"tough-cookie@2.4.3",name:"tough-cookie",escapedName:"tough-cookie",rawSpec:"2.4.3",saveSpec:null,fetchSpec:"2.4.3"},_requiredBy:["/request"],_resolved:"https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",_spec:"2.4.3",_where:"/Users/davidboyne/Dev/MyProjects/github-actions",author:{name:"Jeremy Stashewsky",email:"jstash@gmail.com"},bugs:{url:"https://github.com/salesforce/tough-cookie/issues"},contributors:[{name:"Alexander Savin"},{name:"Ian Livingstone"},{name:"Ivan Nikulin"},{name:"Lalit Kapoor"},{name:"Sam Thompson"},{name:"Sebastian Mayr"}],dependencies:{psl:"^1.1.24",punycode:"^1.4.1"},description:"RFC6265 Cookies and Cookie Jar for node.js",devDependencies:{async:"^1.4.2",nyc:"^11.6.0","string.prototype.repeat":"^0.2.0",vows:"^0.8.1"},engines:{node:">=0.8"},files:["lib"],homepage:"https://github.com/salesforce/tough-cookie",keywords:["HTTP","cookie","cookies","set-cookie","cookiejar","jar","RFC6265","RFC2965"],license:"BSD-3-Clause",main:"./lib/cookie",name:"tough-cookie",repository:{type:"git",url:"git://github.com/salesforce/tough-cookie.git"},scripts:{cover:"nyc --reporter=lcov --reporter=html vows test/*_test.js",test:"vows test/*_test.js"},version:"2.4.3"}},function(e,t){function a(e,t){var a=[],r=[];return null==t&&(t=function(e,t){return a[0]===t?"[Circular ~]":"[Circular ~."+r.slice(0,a.indexOf(t)).join(".")+"]"}),function(i,o){if(a.length>0){var n=a.indexOf(this);~n?a.splice(n+1):a.push(this),~n?r.splice(n,1/0,i):r.push(i),~a.indexOf(o)&&(o=t.call(this,i,o))}else a.push(o);return null==e?o:e.call(this,i,o)}}(e.exports=function(e,t,r,i){return JSON.stringify(e,a(t,i),r)}).getSerialize=a},function(e,t,a){"use strict";var r=a(20),i=a(29),o=a(13),n=a(4),s=a(17),c=a(144),u=a(145),p=a(146),l=a(148),m=a(70),h=a(44),d=a(165),f=a(166),g=a(34),v=a(81),y=a(174).strict,b=a(36),k=a(55),x=a(175),w=a(176).Querystring,j=a(179).Har,_=a(236).Auth,S=a(239).OAuth,E=a(241),F=a(242).Multipart,P=a(243).Redirect,z=a(244).Tunnel,C=a(247),A=a(19).Buffer,O=b.safeStringify,q=b.isReadStream,T=b.toBase64,B=b.defer,D=b.copy,I=b.version,R=k.jar(),N={};function L(){return{uri:this.uri,method:this.method,headers:this.headers}}function U(){return{statusCode:this.statusCode,body:this.body,headers:this.headers,request:L.call(this.request)}}function H(e){e.har&&(this._har=new j(this),e=this._har.options(e)),s.Stream.call(this);var t=Object.keys(H.prototype),a=function(e,t){var a={};for(var r in t)-1===e.indexOf(r)&&(a[r]=t[r]);return a}(t,e);g(this,a),e=function(e,t){var a={};for(var r in t){var i=!(-1===e.indexOf(r)),o="function"==typeof t[r];i&&o||(a[r]=t[r])}return a}(t,e),this.readable=!0,this.writable=!0,e.method&&(this.explicitMethod=!0),this._qs=new w(this),this._auth=new _(this),this._oauth=new S(this),this._multipart=new F(this),this._redirect=new P(this),this._tunnel=new z(this),this.init(e)}function $(){H.debug&&console.error("REQUEST %s",n.format.apply(n,arguments))}n.inherits(H,s.Stream),H.debug=process.env.NODE_DEBUG&&/\brequest\b/.test(process.env.NODE_DEBUG),H.prototype.debug=$,H.prototype.init=function(e){var t=this;for(var a in e||(e={}),t.headers=t.headers?D(t.headers):{},t.headers)void 0===t.headers[a]&&delete t.headers[a];if(h.httpify(t,t.headers),t.method||(t.method=e.method||"GET"),t.localAddress||(t.localAddress=e.localAddress),t._qs.init(e),$(e),t.pool||!1===t.pool||(t.pool=N),t.dests=t.dests||[],t.__isRequestRequest=!0,!t._callback&&t.callback&&(t._callback=t.callback,t.callback=function(){t._callbackCalled||(t._callbackCalled=!0,t._callback.apply(t,arguments))},t.on("error",t.callback.bind()),t.on("complete",t.callback.bind(t,null))),!t.uri&&t.url&&(t.uri=t.url,delete t.url),t.baseUrl){if("string"!=typeof t.baseUrl)return t.emit("error",new Error("options.baseUrl must be a string"));if("string"!=typeof t.uri)return t.emit("error",new Error("options.uri must be a string when using options.baseUrl"));if(0===t.uri.indexOf("//")||-1!==t.uri.indexOf("://"))return t.emit("error",new Error("options.uri must be a path when using options.baseUrl"));var n=t.baseUrl.lastIndexOf("/")===t.baseUrl.length-1,s=0===t.uri.indexOf("/");n&&s?t.uri=t.baseUrl+t.uri.slice(1):n||s?t.uri=t.baseUrl+t.uri:""===t.uri?t.uri=t.baseUrl:t.uri=t.baseUrl+"/"+t.uri,delete t.baseUrl}if(!t.uri)return t.emit("error",new Error("options.uri is a required argument"));if("string"==typeof t.uri&&(t.uri=o.parse(t.uri)),t.uri.href||(t.uri.href=o.format(t.uri)),"unix:"===t.uri.protocol)return t.emit("error",new Error("`unix://` URL scheme is no longer supported. Please use the format `http://unix:SOCKET:PATH`"));if("unix"===t.uri.host&&t.enableUnixSocket(),!1===t.strictSSL&&(t.rejectUnauthorized=!1),t.uri.pathname||(t.uri.pathname="/"),!(t.uri.host||t.uri.hostname&&t.uri.port||t.uri.isUnix)){var c='Invalid URI "'+o.format(t.uri)+'"';return 0===Object.keys(e).length&&(c+=". This can be caused by a crappy redirection."),t.abort(),t.emit("error",new Error(c))}if(t.hasOwnProperty("proxy")||(t.proxy=x(t.uri)),t.tunnel=t._tunnel.isEnabled(),t.proxy&&t._tunnel.setup(e),t._redirect.onRequest(e),t.setHost=!1,!t.hasHeader("host")){var u=t.originalHostHeaderName||"host";t.setHeader(u,t.uri.host),t.uri.port&&("80"===t.uri.port&&"http:"===t.uri.protocol||"443"===t.uri.port&&"https:"===t.uri.protocol)&&t.setHeader(u,t.uri.hostname),t.setHost=!0}if(t.jar(t._jar||e.jar),t.uri.port||("http:"===t.uri.protocol?t.uri.port=80:"https:"===t.uri.protocol&&(t.uri.port=443)),t.proxy&&!t.tunnel?(t.port=t.proxy.port,t.host=t.proxy.hostname):(t.port=t.uri.port,t.host=t.uri.hostname),e.form&&t.form(e.form),e.formData){var p=e.formData,l=t.form(),f=function(e,t){t&&t.hasOwnProperty("value")&&t.hasOwnProperty("options")?l.append(e,t.value,t.options):l.append(e,t)};for(var g in p)if(p.hasOwnProperty(g)){var b=p[g];if(b instanceof Array)for(var k=0;k=100&&s<200||204===s||304===s))n=e;else{var u=e.headers["content-encoding"]||"identity";u=u.trim().toLowerCase();var p={flush:c.Z_SYNC_FLUSH,finishFlush:c.Z_SYNC_FLUSH};"gzip"===u?(n=c.createGunzip(p),e.pipe(n)):"deflate"===u?(n=c.createInflate(p),e.pipe(n)):("identity"!==u&&$("ignoring unrecognized Content-Encoding "+u),n=e)}t.encoding&&(0!==t.dests.length?console.error("Ignoring encoding parameter as this stream is being piped to another stream which makes the encoding option invalid."):n.setEncoding(t.encoding)),t._paused&&n.pause(),t.responseContent=n,t.emit("response",e),t.dests.forEach(function(e){t.pipeDest(e)}),n.on("data",function(a){t.timing&&!t.responseStarted&&(t.responseStartTime=(new Date).getTime(),e.responseStartTime=t.responseStartTime),t._destdata=!0,t.emit("data",a)}),n.once("end",function(e){t.emit("end",e)}),n.on("error",function(e){t.emit("error",e)}),n.on("close",function(){t.emit("close")}),t.callback?t.readResponseBody(e):t.on("end",function(){t._aborted?$("aborted",t.uri.href):t.emit("complete",e)}),$("finish init function",t.uri.href)}}else{$("strict ssl error",t.uri.href);var l=e.hasOwnProperty("socket")?e.socket.authorizationError:t.uri.href+" does not support SSL";t.emit("error",new Error("SSL Error: "+l))}},H.prototype.readResponseBody=function(e){var t=this;$("reading response's body");var a=[],r=0,i=[];t.on("data",function(e){A.isBuffer(e)?e.length&&(r+=e.length,a.push(e)):i.push(e)}),t.on("end",function(){if($("end event",t.uri.href),t._aborted)return $("aborted",t.uri.href),a=[],void(r=0);if(r?($("has body",t.uri.href,r),e.body=A.concat(a,r),null!==t.encoding&&(e.body=e.body.toString(t.encoding)),a=[],r=0):i.length&&("utf8"===t.encoding&&i[0].length>0&&"\ufeff"===i[0][0]&&(i[0]=i[0].substring(1)),e.body=i.join("")),t._json)try{e.body=JSON.parse(e.body,t._jsonReviver)}catch(e){$("invalid JSON received",t.uri.href)}$("emitting complete",t.uri.href),void 0!==e.body||t._json||(e.body=null===t.encoding?A.alloc(0):""),t.emit("complete",e,e.body)})},H.prototype.abort=function(){this._aborted=!0,this.req?this.req.abort():this.response&&this.response.destroy(),this.emit("abort")},H.prototype.pipeDest=function(e){var t=this.response;if(e.headers&&!e.headersSent){if(t.caseless.has("content-type")){var a=t.caseless.has("content-type");e.setHeader?e.setHeader(a,t.headers[a]):e.headers[a]=t.headers[a]}if(t.caseless.has("content-length")){var r=t.caseless.has("content-length");e.setHeader?e.setHeader(r,t.headers[r]):e.headers[r]=t.headers[r]}}if(e.setHeader&&!e.headersSent){for(var i in t.headers)this.gzip&&"content-encoding"===i||e.setHeader(i,t.headers[i]);e.statusCode=t.statusCode}this.pipefilter&&this.pipefilter(t,e)},H.prototype.qs=function(e,t){var a;for(var r in a=!t&&this.uri.query?this._qs.parse(this.uri.query):{},e)a[r]=e[r];var i=this._qs.stringify(a);return""===i?this:(this.uri=o.parse(this.uri.href.split("?")[0]+"?"+i),this.url=this.uri,this.path=this.uri.path,"unix"===this.uri.host&&this.enableUnixSocket(),this)},H.prototype.form=function(e){var t=this;return e?(/^application\/x-www-form-urlencoded\b/.test(t.getHeader("content-type"))||t.setHeader("content-type","application/x-www-form-urlencoded"),t.body="string"==typeof e?t._qs.rfc3986(e.toString("utf8")):t._qs.stringify(e).toString("utf8"),t):(t._form=new f,t._form.on("error",function(e){e.message="form-data: "+e.message,t.emit("error",e),t.abort()}),t._form)},H.prototype.multipart=function(e){return this._multipart.onRequest(e),this._multipart.chunked||(this.body=this._multipart.body),this},H.prototype.json=function(e){return this.hasHeader("accept")||this.setHeader("accept","application/json"),"function"==typeof this.jsonReplacer&&(this._jsonReplacer=this.jsonReplacer),this._json=!0,"boolean"==typeof e?void 0!==this.body&&(/^application\/x-www-form-urlencoded\b/.test(this.getHeader("content-type"))?this.body=this._qs.rfc3986(this.body):this.body=O(this.body,this._jsonReplacer),this.hasHeader("content-type")||this.setHeader("content-type","application/json")):(this.body=O(e,this._jsonReplacer),this.hasHeader("content-type")||this.setHeader("content-type","application/json")),"function"==typeof this.jsonReviver&&(this._jsonReviver=this.jsonReviver),this},H.prototype.getHeader=function(e,t){var a,r;return t||(t=this.headers),Object.keys(t).forEach(function(i){i.length===e.length&&(r=new RegExp(e,"i"),i.match(r)&&(a=t[i]))}),a},H.prototype.enableUnixSocket=function(){var e=this.uri.path.split(":"),t=e[0],a=e[1];this.socketPath=t,this.uri.pathname=a,this.uri.path=a,this.uri.host=t,this.uri.hostname=t,this.uri.isUnix=!0},H.prototype.auth=function(e,t,a,r){return this._auth.onRequest(e,t,a,r),this},H.prototype.aws=function(e,t){if(!t)return this._aws=e,this;if(4===e.sign_version||"4"===e.sign_version){var a={host:this.uri.host,path:this.uri.path,method:this.method,headers:this.headers,body:this.body};e.service&&(a.service=e.service);var r=p.sign(a,{accessKeyId:e.key,secretAccessKey:e.secret,sessionToken:e.session});this.setHeader("authorization",r.headers.Authorization),this.setHeader("x-amz-date",r.headers["X-Amz-Date"]),r.headers["X-Amz-Security-Token"]&&this.setHeader("x-amz-security-token",r.headers["X-Amz-Security-Token"])}else{var i=new Date;this.setHeader("date",i.toUTCString());var o={key:e.key,secret:e.secret,verb:this.method.toUpperCase(),date:i,contentType:this.getHeader("content-type")||"",md5:this.getHeader("content-md5")||"",amazonHeaders:u.canonicalizeHeaders(this.headers)},n=this.uri.path;e.bucket&&n?o.resource="/"+e.bucket+n:e.bucket&&!n?o.resource="/"+e.bucket:!e.bucket&&n?o.resource=n:e.bucket||n||(o.resource="/"),o.resource=u.canonicalizeResource(o.resource),this.setHeader("authorization",u.authorization(o))}return this},H.prototype.httpSignature=function(e){var t=this;return l.signRequest({getHeader:function(e){return t.getHeader(e,t.headers)},setHeader:function(e,a){t.setHeader(e,a)},method:t.method,path:t.path},e),$("httpSignature authorization",t.getHeader("authorization")),t},H.prototype.hawk=function(e){this.setHeader("Authorization",E.header(this.uri,this.method,e))},H.prototype.oauth=function(e){return this._oauth.onRequest(e),this},H.prototype.jar=function(e){var t;if(0===this._redirect.redirectsFollowed&&(this.originalCookieHeader=this.getHeader("cookie")),e){var a=e&&e.getCookieString?e:R,r=this.uri.href;a&&(t=a.getCookieString(r))}else t=!1,this._disableCookies=!0;return t&&t.length&&(this.originalCookieHeader?this.setHeader("cookie",this.originalCookieHeader+"; "+t):this.setHeader("cookie",t)),this._jar=e,this},H.prototype.pipe=function(e,t){if(!this.response)return this.dests.push(e),s.Stream.prototype.pipe.call(this,e,t),e;if(this._destdata)this.emit("error",new Error("You cannot pipe after data has been emitted from the response."));else{if(!this._ended)return s.Stream.prototype.pipe.call(this,e,t),this.pipeDest(e),e;this.emit("error",new Error("You cannot pipe after the response has been ended."))}},H.prototype.write=function(){if(!this._aborted)return this._started||this.start(),this.req?this.req.write.apply(this.req,arguments):void 0},H.prototype.end=function(e){this._aborted||(e&&this.write(e),this._started||this.start(),this.req&&this.req.end())},H.prototype.pause=function(){this.responseContent?this.responseContent.pause.apply(this.responseContent,arguments):this._paused=!0},H.prototype.resume=function(){this.responseContent?this.responseContent.resume.apply(this.responseContent,arguments):this._paused=!1},H.prototype.destroy=function(){this._ended?this.response&&this.response.destroy():this.end()},H.defaultProxyHeaderWhiteList=z.defaultProxyHeaderWhiteList.slice(),H.defaultProxyHeaderExclusiveList=z.defaultProxyHeaderExclusiveList.slice(),H.prototype.toJSON=L,e.exports=H},function(e,t){e.exports=require("zlib")},function(e,t,a){ /*! * Copyright 2010 LearnBoost * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var r=a(3),i=a(13).parse,o=["acl","location","logging","notification","partNumber","policy","requestPayment","torrent","uploadId","uploads","versionId","versioning","versions","website"];function n(e){return"AWS "+e.key+":"+c(e)}function s(e){return r.createHmac("sha1",e.secret).update(e.message).digest("base64")}function c(e){return e.message=u(e),s(e)}function u(e){var t=e.amazonHeaders||"";return t&&(t+="\n"),[e.verb,e.md5,e.contentType,e.date?e.date.toUTCString():"",t+e.resource].join("\n")}function p(e){return"GET\n\n\n"+e.date+"\n"+e.resource}e.exports=n,e.exports.authorization=n,e.exports.hmacSha1=s,e.exports.sign=c,e.exports.signQuery=function(e){return e.message=p(e),s(e)},e.exports.stringToSign=u,e.exports.queryStringToSign=p,e.exports.canonicalizeHeaders=function(e){for(var t=[],a=Object.keys(e),r=0,i=a.length;r=0&&"us-east-1"===this.region||["cloudfront","ls","route53","iam","importexport","sts"].indexOf(this.service)>=0},l.prototype.createHost=function(){var e=this.isSingleRegion()?"":("s3"===this.service&&"us-east-1"!==this.region?"-":".")+this.region;return("ses"===this.service?"email":this.service)+e+".amazonaws.com"},l.prototype.prepareRequest=function(){this.parsePath();var e,t=this.request,a=t.headers;t.signQuery?(this.parsedPath.query=e=this.parsedPath.query||{},this.credentials.sessionToken&&(e["X-Amz-Security-Token"]=this.credentials.sessionToken),"s3"!==this.service||e["X-Amz-Expires"]||(e["X-Amz-Expires"]=86400),e["X-Amz-Date"]?this.datetime=e["X-Amz-Date"]:e["X-Amz-Date"]=this.getDateTime(),e["X-Amz-Algorithm"]="AWS4-HMAC-SHA256",e["X-Amz-Credential"]=this.credentials.accessKeyId+"/"+this.credentialString(),e["X-Amz-SignedHeaders"]=this.signedHeaders()):(t.doNotModifyHeaders||this.isCodeCommitGit||(!t.body||a["Content-Type"]||a["content-type"]||(a["Content-Type"]="application/x-www-form-urlencoded; charset=utf-8"),!t.body||a["Content-Length"]||a["content-length"]||(a["Content-Length"]=Buffer.byteLength(t.body)),!this.credentials.sessionToken||a["X-Amz-Security-Token"]||a["x-amz-security-token"]||(a["X-Amz-Security-Token"]=this.credentials.sessionToken),"s3"!==this.service||a["X-Amz-Content-Sha256"]||a["x-amz-content-sha256"]||(a["X-Amz-Content-Sha256"]=u(this.request.body||"","hex")),a["X-Amz-Date"]||a["x-amz-date"]?this.datetime=a["X-Amz-Date"]||a["x-amz-date"]:a["X-Amz-Date"]=this.getDateTime()),delete a.Authorization,delete a.authorization)},l.prototype.sign=function(){return this.parsedPath||this.prepareRequest(),this.request.signQuery?this.parsedPath.query["X-Amz-Signature"]=this.signature():this.request.headers.Authorization=this.authHeader(),this.request.path=this.formatPath(),this.request},l.prototype.getDateTime=function(){if(!this.datetime){var e=this.request.headers,t=new Date(e.Date||e.date||new Date);this.datetime=t.toISOString().replace(/[:\-]|\.\d{3}/g,""),this.isCodeCommitGit&&(this.datetime=this.datetime.slice(0,-1))}return this.datetime},l.prototype.getDate=function(){return this.getDateTime().substr(0,8)},l.prototype.authHeader=function(){return["AWS4-HMAC-SHA256 Credential="+this.credentials.accessKeyId+"/"+this.credentialString(),"SignedHeaders="+this.signedHeaders(),"Signature="+this.signature()].join(", ")},l.prototype.signature=function(){var e,t,a,r=this.getDate(),i=[this.credentials.secretAccessKey,r,this.region,this.service].join(),o=s.get(i);return o||(e=c("AWS4"+this.credentials.secretAccessKey,r),t=c(e,this.region),a=c(t,this.service),o=c(a,"aws4_request"),s.set(i,o)),c(o,this.stringToSign(),"hex")},l.prototype.stringToSign=function(){return["AWS4-HMAC-SHA256",this.getDateTime(),this.credentialString(),u(this.canonicalString(),"hex")].join("\n")},l.prototype.canonicalString=function(){this.parsedPath||this.prepareRequest();var e,t=this.parsedPath.path,a=this.parsedPath.query,r=this.request.headers,i="",n="s3"!==this.service,s="s3"===this.service||this.request.doNotEncodePath,c="s3"===this.service,l="s3"===this.service;return e="s3"===this.service&&this.request.signQuery?"UNSIGNED-PAYLOAD":this.isCodeCommitGit?"":r["X-Amz-Content-Sha256"]||r["x-amz-content-sha256"]||u(this.request.body||"","hex"),a&&(i=p(o.stringify(Object.keys(a).sort().reduce(function(e,t){return t?(e[t]=Array.isArray(a[t])?l?a[t][0]:a[t].slice().sort():a[t],e):e},{})))),"/"!==t&&(n&&(t=t.replace(/\/{2,}/g,"/")),"/"!==(t=t.split("/").reduce(function(e,t){return n&&".."===t?e.pop():n&&"."===t||(s&&(t=decodeURIComponent(t)),e.push(p(encodeURIComponent(t)))),e},[]).join("/"))[0]&&(t="/"+t),c&&(t=t.replace(/%2F/g,"/"))),[this.request.method||"GET",t,i,this.canonicalHeaders()+"\n",this.signedHeaders(),e].join("\n")},l.prototype.canonicalHeaders=function(){var e=this.request.headers;return Object.keys(e).sort(function(e,t){return e.toLowerCase()=0&&(a=o.parse(e.slice(t+1)),e=e.slice(0,t)),/[^0-9A-Za-z!'()*\-._~%\/]/.test(e)&&(e=e.split("/").map(function(e){return encodeURIComponent(decodeURIComponent(e))}).join("/")),this.parsedPath={path:e,query:a}},l.prototype.formatPath=function(){var e=this.parsedPath.path,t=this.parsedPath.query;return t?(null!=t[""]&&delete t[""],e+"?"+p(o.stringify(t))):e},r.RequestSigner=l,r.sign=function(e,t){return new l(e,t).sign()}},function(e,t){function a(e){this.capacity=0|e,this.map=Object.create(null),this.list=new r}function r(){this.firstNode=null,this.lastNode=null}function i(e,t){this.key=e,this.val=t,this.prev=null,this.next=null}e.exports=function(e){return new a(e)},a.prototype.get=function(e){var t=this.map[e];if(null!=t)return this.used(t),t.val},a.prototype.set=function(e,t){var a=this.map[e];if(null!=a)a.val=t;else{if(this.capacity||this.prune(),!this.capacity)return!1;a=new i(e,t),this.map[e]=a,this.capacity--}return this.used(a),!0},a.prototype.used=function(e){this.list.moveToFront(e)},a.prototype.prune=function(){var e=this.list.pop();null!=e&&(delete this.map[e.key],this.capacity++)},r.prototype.moveToFront=function(e){this.firstNode!=e&&(this.remove(e),null==this.firstNode?(this.firstNode=e,this.lastNode=e,e.prev=null,e.next=null):(e.prev=null,e.next=this.firstNode,e.next.prev=e,this.firstNode=e))},r.prototype.pop=function(){var e=this.lastNode;return null!=e&&this.remove(e),e},r.prototype.remove=function(e){this.firstNode==e?this.firstNode=e.next:null!=e.prev&&(e.prev.next=e.next),this.lastNode==e?this.lastNode=e.prev:null!=e.next&&(e.next.prev=e.prev)}},function(e,t,a){var r=a(149),i=a(157),o=a(162),n=a(30);e.exports={parse:r.parseRequest,parseRequest:r.parseRequest,sign:i.signRequest,signRequest:i.signRequest,createSigner:i.createSigner,isSigner:i.isSigner,sshKeyToPEM:n.sshKeyToPEM,sshKeyFingerprint:n.fingerprint,pemToRsaSSHKey:n.pemToRsaSSHKey,verify:o.verifySignature,verifySignature:o.verifySignature,verifyHMAC:o.verifyHMAC}},function(e,t,a){var r=a(0),i=a(4),o=a(30),n=(o.HASH_ALGOS,o.PK_ALGOS,o.HttpSignatureError),s=o.InvalidAlgorithmError,c=o.validateAlgorithm,u=0,p=1,l=0,m=1,h=2,d=3;function f(e){n.call(this,e,f)}function g(e){n.call(this,e,g)}function v(e){n.call(this,e,v)}function y(e){n.call(this,e,y)}function b(e){n.call(this,e,b)}i.inherits(f,n),i.inherits(g,n),i.inherits(v,n),i.inherits(y,n),i.inherits(b,n),e.exports={parseRequest:function(e,t){r.object(e,"request"),r.object(e.headers,"request.headers"),void 0===t&&(t={}),void 0===t.headers&&(t.headers=[e.headers["x-date"]?"x-date":"date"]),r.object(t,"options"),r.arrayOfString(t.headers,"options.headers"),r.optionalFinite(t.clockSkew,"options.clockSkew");var a=t.authorizationHeaderName||"authorization";if(!e.headers[a])throw new y("no "+a+" header present in the request");t.clockSkew=t.clockSkew||300;var i,o=0,n=u,k=l,x="",w="",j={scheme:"",params:{},signingString:""},_=e.headers[a];for(o=0;o<_.length;o++){var S=_.charAt(o);switch(Number(n)){case u:" "!==S?j.scheme+=S:n=p;break;case p:switch(Number(k)){case l:var E=S.charCodeAt(0);if(E>=65&&E<=90||E>=97&&E<=122)x+=S;else{if("="!==S)throw new g("bad param format");if(0===x.length)throw new g("bad param format");k=m}break;case m:if('"'!==S)throw new g("bad param format");w="",k=h;break;case h:'"'===S?(j.params[x]=w,k=d):w+=S;break;case d:if(","!==S)throw new g("bad param format");x="",k=l;break;default:throw new Error("Invalid substate")}break;default:throw new Error("Invalid substate")}}if(j.params.headers&&""!==j.params.headers?j.params.headers=j.params.headers.split(" "):e.headers["x-date"]?j.params.headers=["x-date"]:j.params.headers=["date"],!j.scheme||"Signature"!==j.scheme)throw new g('scheme was not "Signature"');if(!j.params.keyId)throw new g("keyId was not specified");if(!j.params.algorithm)throw new g("algorithm was not specified");if(!j.params.signature)throw new g("signature was not specified");j.params.algorithm=j.params.algorithm.toLowerCase();try{c(j.params.algorithm)}catch(e){throw e instanceof s?new v(j.params.algorithm+" is not supported"):e}for(o=0;o1e3*t.clockSkew)throw new f("clock skew of "+C/1e3+"s was greater than "+t.clockSkew+"s")}if(t.headers.forEach(function(e){if(j.params.headers.indexOf(e.toLowerCase())<0)throw new y(e+" was not a signed header")}),t.algorithms&&-1===t.algorithms.indexOf(j.params.algorithm))throw new v(j.params.algorithm+" is not a supported algorithm");return j.algorithm=j.params.algorithm.toUpperCase(),j.keyId=j.params.keyId,j}}},function(e,t,a){var r=a(39),i=a(40),o=a(151),n=a(152);for(var s in e.exports={Reader:o,Writer:n},i)i.hasOwnProperty(s)&&(e.exports[s]=i[s]);for(var c in r)r.hasOwnProperty(c)&&(e.exports[c]=r[c])},function(e,t,a){var r=a(21),i=a(2).Buffer,o=a(40),n=a(39).newInvalidAsn1Error;function s(e){if(!e||!i.isBuffer(e))throw new TypeError("data must be a node Buffer");this._buf=e,this._size=e.length,this._len=0,this._offset=0}Object.defineProperty(s.prototype,"length",{enumerable:!0,get:function(){return this._len}}),Object.defineProperty(s.prototype,"offset",{enumerable:!0,get:function(){return this._offset}}),Object.defineProperty(s.prototype,"remain",{get:function(){return this._size-this._offset}}),Object.defineProperty(s.prototype,"buffer",{get:function(){return this._buf.slice(this._offset)}}),s.prototype.readByte=function(e){if(this._size-this._offset<1)return null;var t=255&this._buf[this._offset];return e||(this._offset+=1),t},s.prototype.peek=function(){return this.readByte(!0)},s.prototype.readLength=function(e){if(void 0===e&&(e=this._offset),e>=this._size)return null;var t=255&this._buf[e++];if(null===t)return null;if(128==(128&t)){if(0===(t&=127))throw n("Indefinite length not supported");if(t>4)throw n("encoding too long");if(this._size-ethis._size-r)return null;if(this._offset=r,0===this.length)return t?i.alloc(0):"";var s=this._buf.slice(this._offset,this._offset+this.length);return this._offset+=this.length,t?s:s.toString("utf8")},s.prototype.readOID=function(e){e||(e=o.OID);var t=this.readString(e,!0);if(null===t)return null;for(var a=[],r=0,i=0;i>0),a.join(".")},s.prototype._readTag=function(e){r.ok(void 0!==e);var t=this.peek();if(null===t)return null;if(t!==e)throw n("Expected 0x"+e.toString(16)+": got 0x"+t.toString(16));var a=this.readLength(this._offset+1);if(null===a)return null;if(this.length>4)throw n("Integer too long: "+this.length);if(this.length>this._size-a)return null;this._offset=a;for(var i=this._buf[this._offset],o=0,s=0;s>0},e.exports=s},function(e,t,a){var r=a(21),i=a(2).Buffer,o=a(40),n=a(39).newInvalidAsn1Error,s={size:1024,growthFactor:8};function c(e){var t,a;t=s,a=e||{},r.ok(t),r.equal(typeof t,"object"),r.ok(a),r.equal(typeof a,"object"),Object.getOwnPropertyNames(t).forEach(function(e){if(!a[e]){var r=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(a,e,r)}}),e=a,this._buf=i.alloc(e.size||1024),this._size=this._buf.length,this._offset=0,this._options=e,this._seq=[]}Object.defineProperty(c.prototype,"buffer",{get:function(){if(this._seq.length)throw n(this._seq.length+" unended sequence(s)");return this._buf.slice(0,this._offset)}}),c.prototype.writeByte=function(e){if("number"!=typeof e)throw new TypeError("argument must be a Number");this._ensure(1),this._buf[this._offset++]=e},c.prototype.writeInt=function(e,t){if("number"!=typeof e)throw new TypeError("argument must be a Number");"number"!=typeof t&&(t=o.Integer);for(var a=4;(0==(4286578688&e)||-8388608==(4286578688&e))&&a>1;)a--,e<<=8;if(a>4)throw n("BER ints cannot be > 0xffffffff");for(this._ensure(2+a),this._buf[this._offset++]=t,this._buf[this._offset++]=a;a-- >0;)this._buf[this._offset++]=(4278190080&e)>>>24,e<<=8},c.prototype.writeNull=function(){this.writeByte(o.Null),this.writeByte(0)},c.prototype.writeEnumeration=function(e,t){if("number"!=typeof e)throw new TypeError("argument must be a Number");return"number"!=typeof t&&(t=o.Enumeration),this.writeInt(e,t)},c.prototype.writeBoolean=function(e,t){if("boolean"!=typeof e)throw new TypeError("argument must be a Boolean");"number"!=typeof t&&(t=o.Boolean),this._ensure(3),this._buf[this._offset++]=t,this._buf[this._offset++]=1,this._buf[this._offset++]=e?255:0},c.prototype.writeString=function(e,t){if("string"!=typeof e)throw new TypeError("argument must be a string (was: "+typeof e+")");"number"!=typeof t&&(t=o.OctetString);var a=i.byteLength(e);this.writeByte(t),this.writeLength(a),a&&(this._ensure(a),this._buf.write(e,this._offset),this._offset+=a)},c.prototype.writeBuffer=function(e,t){if("number"!=typeof t)throw new TypeError("tag must be a number");if(!i.isBuffer(e))throw new TypeError("argument must be a buffer");this.writeByte(t),this.writeLength(e.length),this._ensure(e.length),e.copy(this._buf,this._offset,0,e.length),this._offset+=e.length},c.prototype.writeStringArray=function(e){if(!e instanceof Array)throw new TypeError("argument must be an Array[String]");var t=this;e.forEach(function(e){t.writeString(e)})},c.prototype.writeOID=function(e,t){if("string"!=typeof e)throw new TypeError("argument must be a string");if("number"!=typeof t&&(t=o.OID),!/^([0-9]+\.){3,}[0-9]+$/.test(e))throw new Error("argument is not a valid OID string");var a=e.split("."),r=[];r.push(40*parseInt(a[0],10)+parseInt(a[1],10)),a.slice(2).forEach(function(e){!function(e,t){t<128?e.push(t):t<16384?(e.push(t>>>7|128),e.push(127&t)):t<2097152?(e.push(t>>>14|128),e.push(255&(t>>>7|128)),e.push(127&t)):t<268435456?(e.push(t>>>21|128),e.push(255&(t>>>14|128)),e.push(255&(t>>>7|128)),e.push(127&t)):(e.push(255&(t>>>28|128)),e.push(255&(t>>>21|128)),e.push(255&(t>>>14|128)),e.push(255&(t>>>7|128)),e.push(127&t))}(r,parseInt(e,10))});var i=this;this._ensure(2+r.length),this.writeByte(t),this.writeLength(r.length),r.forEach(function(e){i.writeByte(e)})},c.prototype.writeLength=function(e){if("number"!=typeof e)throw new TypeError("argument must be a Number");if(this._ensure(4),e<=127)this._buf[this._offset++]=e;else if(e<=255)this._buf[this._offset++]=129,this._buf[this._offset++]=e;else if(e<=65535)this._buf[this._offset++]=130,this._buf[this._offset++]=e>>8,this._buf[this._offset++]=e;else{if(!(e<=16777215))throw n("Length too long (> 4 bytes)");this._buf[this._offset++]=131,this._buf[this._offset++]=e>>16,this._buf[this._offset++]=e>>8,this._buf[this._offset++]=e}},c.prototype.startSequence=function(e){"number"!=typeof e&&(e=o.Sequence|o.Constructor),this.writeByte(e),this._seq.push(this._offset),this._ensure(3),this._offset+=3},c.prototype.endSequence=function(){var e=this._seq.pop(),t=e+3,a=this._offset-t;if(a<=127)this._shift(t,a,-2),this._buf[e]=a;else if(a<=255)this._shift(t,a,-1),this._buf[e]=129,this._buf[e+1]=a;else if(a<=65535)this._buf[e]=130,this._buf[e+1]=a>>8,this._buf[e+2]=a;else{if(!(a<=16777215))throw n("Sequence too long");this._shift(t,a,1),this._buf[e]=131,this._buf[e+1]=a>>16,this._buf[e+2]=a>>8,this._buf[e+3]=a}},c.prototype._shift=function(e,t,a){r.ok(void 0!==e),r.ok(void 0!==t),r.ok(a),this._buf.copy(this._buf,e+a,e,e+t),this._offset+=a},c.prototype._ensure=function(e){if(r.ok(e),this._size-this._offset=t?e:n("0"+e,t)}t.ECCurves=a(154),t.ECKey=function(e,t,a){var s,c=e(),u=c.getN(),p=Math.floor(u.bitLength()/8);if(t)if(a){e=c.getCurve();this.P=e.decodePointHex(t.toString("hex"))}else{if(t.length!=p)return!1;s=new i(t.toString("hex"),16)}else{var l=u.subtract(i.ONE),m=new i(r.randomBytes(u.bitLength()));s=m.mod(l).add(i.ONE),this.P=c.getG().multiply(s)}this.P&&(this.PublicKey=o.from(c.getCurve().encodeCompressedPointHex(this.P),"hex")),s&&(this.PrivateKey=o.from(n(s.toString(16),2*p),"hex"),this.deriveSharedSecret=function(e){if(!e||!e.P)return!1;var t=e.P.multiply(s);return o.from(n(t.getX().toBigInteger().toString(16),2*p),"hex")})}},function(e,t,a){var r=a(23).BigInteger,i=a(31).ECCurveFp;function o(e,t,a,r){this.curve=e,this.g=t,this.n=a,this.h=r}function n(e){return new r(e,16)}function s(){var e=n("FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF"),t=n("FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC"),a=n("E87579C11079F43DD824993C2CEE5ED3"),s=n("FFFFFFFE0000000075A30D1B9038A115"),c=r.ONE,u=new i(e,t,a),p=u.decodePointHex("04161FF7528B899B2D0C28607CA52C5B86CF5AC8395BAFEB13C02DA292DDED7A83");return new o(u,p,s,c)}function c(){var e=n("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73"),t=r.ZERO,a=n("7"),s=n("0100000000000000000001B8FA16DFAB9ACA16B6B3"),c=r.ONE,u=new i(e,t,a),p=u.decodePointHex("043B4C382CE37AA192A4019E763036F4F5DD4D7EBB938CF935318FDCED6BC28286531733C3F03C4FEE");return new o(u,p,s,c)}function u(){var e=n("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF"),t=n("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC"),a=n("1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45"),s=n("0100000000000000000001F4C8F927AED3CA752257"),c=r.ONE,u=new i(e,t,a),p=u.decodePointHex("044A96B5688EF573284664698968C38BB913CBFC8223A628553168947D59DCC912042351377AC5FB32");return new o(u,p,s,c)}function p(){var e=n("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37"),t=r.ZERO,a=n("3"),s=n("FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D"),c=r.ONE,u=new i(e,t,a),p=u.decodePointHex("04DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D");return new o(u,p,s,c)}function l(){var e=n("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF"),t=n("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC"),a=n("64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1"),s=n("FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831"),c=r.ONE,u=new i(e,t,a),p=u.decodePointHex("04188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF101207192B95FFC8DA78631011ED6B24CDD573F977A11E794811");return new o(u,p,s,c)}function m(){var e=n("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001"),t=n("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE"),a=n("B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4"),s=n("FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D"),c=r.ONE,u=new i(e,t,a),p=u.decodePointHex("04B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34");return new o(u,p,s,c)}function h(){var e=n("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF"),t=n("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC"),a=n("5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B"),s=n("FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"),c=r.ONE,u=new i(e,t,a),p=u.decodePointHex("046B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C2964FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5");return new o(u,p,s,c)}o.prototype.getCurve=function(){return this.curve},o.prototype.getG=function(){return this.g},o.prototype.getN=function(){return this.n},o.prototype.getH=function(){return this.h},e.exports={secp128r1:s,secp160k1:c,secp160r1:u,secp192k1:p,secp192r1:l,secp224r1:m,secp256r1:h}},function(e,t,a){e.exports={read:function(e,t){n.isBuffer(e)&&(e=e.toString("ascii"));var a=e.trim().split(/[ \t\n]+/g);if(a.length<2||a.length>3)throw new Error("Not a valid SSH certificate line");var r=a[0],i=a[1];return g(i=n.from(i,"base64"),r)},verify:function(e,t){return!1},sign:function(e,t){void 0===e.signatures.openssh&&(e.signatures.openssh={});try{var a=b(e,!0)}catch(t){return delete e.signatures.openssh,!1}var r=e.signatures.openssh,i=void 0;"rsa"!==t.type&&"dsa"!==t.type||(i="sha1");var o=t.createSign(i);return o.write(a),r.signature=o.sign(),!0},signAsync:function(e,t,a){void 0===e.signatures.openssh&&(e.signatures.openssh={});try{var r=b(e,!0)}catch(t){return delete e.signatures.openssh,void a(t)}var i=e.signatures.openssh;t(r,function(e,t){if(e)a(e);else{try{t.toBuffer("ssh")}catch(e){return void a(e)}i.signature=t,a()}})},write:function(e,t){void 0===t&&(t={});var a=b(e),r=k(e.subjectKey)+" "+a.toString("base64");t.comment&&(r=r+" "+t.comment);return r},fromBuffer:g,toBuffer:b};var r=a(0),i=a(25),o=a(3),n=a(2).Buffer,s=a(8),c=a(5),u=(a(7),a(28)),p=a(15),l=a(10),m=a(6),h=a(27);var d={user:1,host:2};Object.keys(d).forEach(function(e){d[d[e]]=e});var f=/^ecdsa-sha2-([^@-]+)-cert-v01@openssh.com$/;function g(e,t,a){var o=new i({buffer:e}),n=o.readString();if(void 0!==t&&n!==t)throw new Error("SSH certificate algorithm mismatch");void 0===t&&(t=n);var g={signatures:{}};g.signatures.openssh={},g.signatures.openssh.nonce=o.readBuffer();var y={},b=y.parts=[];y.type=function(e){if("ssh-rsa-cert-v01@openssh.com"===e)return"rsa";if("ssh-dss-cert-v01@openssh.com"===e)return"dsa";if(e.match(f))return"ecdsa";if("ssh-ed25519-cert-v01@openssh.com"===e)return"ed25519";throw new Error("Unsupported cert type "+e)}(t);for(var k=s.info[y.type].parts.length;b.length=1,"key must have at least one part");var x=s.info[y.type];if("ecdsa"===y.type){var w=f.exec(t);r.ok(null!==w),r.strictEqual(w[1],b[0].data.toString())}for(var j=0;j0;)n=s[--u].match(/[-]+[ ]*END CERTIFICATE[ ]*[-]+/);i.ok(n,"invalid PEM footer"),s=s.slice(c,u+1);var p={};for(;s=s.slice(1),a=s[0].match(/^([A-Za-z0-9-]+): (.+)$/);)p[a[1].toLowerCase()]=a[2];return s=s.slice(0,-1).join(""),e=o.from(s,"base64"),r.read(e,t)},verify:r.verify,sign:r.sign,write:function(e,t){var a=r.write(e,t),i=a.toString("base64"),n=i.length+i.length/64+18+16+2*"CERTIFICATE".length+10,s=o.alloc(n),c=0;c+=s.write("-----BEGIN CERTIFICATE-----\n",c);for(var u=0;ui.length&&(p=i.length),c+=s.write(i.slice(u,p),c),s[c++]=10,u=p}return c+=s.write("-----END CERTIFICATE-----\n",c),s.slice(0,c)}};var i=a(0),o=(a(11),a(2).Buffer);a(8),a(6),a(5),a(7),a(14),a(28),a(10),a(27)},function(e,t,a){var r=a(0),i=a(3),o=(a(20),a(4)),n=a(38),s=a(158),c=a(30),u=a(4).format,p=c.HASH_ALGOS,l=c.PK_ALGOS,m=c.InvalidAlgorithmError,h=c.HttpSignatureError,d=c.validateAlgorithm,f='Signature keyId="%s",algorithm="%s",headers="%s",signature="%s"';function g(e){h.call(this,e,g)}function v(e){h.call(this,e,v)}function y(e){r.object(e,"options");var t=[];if(void 0!==e.algorithm&&(r.string(e.algorithm,"options.algorithm"),t=d(e.algorithm)),this.rs_alg=t,void 0!==e.sign)r.func(e.sign,"options.sign"),this.rs_signFunc=e.sign;else if("hmac"===t[0]&&void 0!==e.key){if(r.string(e.keyId,"options.keyId"),this.rs_keyId=e.keyId,"string"!=typeof e.key&&!Buffer.isBuffer(e.key))throw new TypeError("options.key for HMAC must be a string or Buffer");this.rs_signer=i.createHmac(t[1].toUpperCase(),e.key),this.rs_signer.sign=function(){var e=this.digest("base64");return{hashAlgorithm:t[1],toString:function(){return e}}}}else{if(void 0===e.key)throw new TypeError("options.sign (func) or options.key is required");var a=e.key;if(("string"==typeof a||Buffer.isBuffer(a))&&(a=n.parsePrivateKey(a)),r.ok(n.PrivateKey.isPrivateKey(a,[1,2]),"options.key must be a sshpk.PrivateKey"),this.rs_key=a,r.string(e.keyId,"options.keyId"),this.rs_keyId=e.keyId,!l[a.type])throw new m(a.type.toUpperCase()+" type keys are not supported");if(void 0!==t[0]&&a.type!==t[0])throw new m("options.key must be a "+t[0].toUpperCase()+" key, was given a "+a.type.toUpperCase()+" key instead");this.rs_signer=a.createSign(t[1])}this.rs_headers=[],this.rs_lines=[]}o.inherits(g,h),o.inherits(v,h),y.prototype.writeHeader=function(e,t){if(r.string(e,"header"),e=e.toLowerCase(),r.string(t,"value"),this.rs_headers.push(e),this.rs_signFunc)this.rs_lines.push(e+": "+t);else{var a=e+": "+t;this.rs_headers.length>0&&(a="\n"+a),this.rs_signer.update(a)}return t},y.prototype.writeDateHeader=function(){return this.writeHeader("date",s.rfc1123(new Date))},y.prototype.writeTarget=function(e,t){r.string(e,"method"),r.string(t,"path"),e=e.toLowerCase(),this.writeHeader("(request-target)",e+" "+t)},y.prototype.sign=function(e){if(r.func(e,"callback"),this.rs_headers.length<1)throw new Error("At least one header must be signed");var t,a;if(this.rs_signFunc){var i=this.rs_lines.join("\n"),o=this;this.rs_signFunc(i,function(i,n){if(i)e(i);else{try{r.object(n,"signature"),r.string(n.keyId,"signature.keyId"),r.string(n.algorithm,"signature.algorithm"),r.string(n.signature,"signature.signature"),t=d(n.algorithm),a=u(f,n.keyId,n.algorithm,o.rs_headers.join(" "),n.signature)}catch(t){return void e(t)}e(null,a)}})}else{try{var n=this.rs_signer.sign()}catch(t){return void e(t)}t=(this.rs_alg[0]||this.rs_key.type)+"-"+n.hashAlgorithm;var s=n.toString();a=u(f,this.rs_keyId,t,this.rs_headers.join(" "),s),e(null,a)}},e.exports={isSigner:function(e){return"object"==typeof e&&e instanceof y},createSigner:function(e){return new y(e)},signRequest:function(e,t){r.object(e,"request"),r.object(t,"options"),r.optionalString(t.algorithm,"options.algorithm"),r.string(t.keyId,"options.keyId"),r.optionalArrayOfString(t.headers,"options.headers"),r.optionalString(t.httpVersion,"options.httpVersion"),e.getHeader("Date")||e.setHeader("Date",s.rfc1123(new Date)),t.headers||(t.headers=["date"]),t.httpVersion||(t.httpVersion="1.1");var a,o=[];t.algorithm&&(t.algorithm=t.algorithm.toLowerCase(),o=d(t.algorithm));var c,h="";for(a=0;a=0);var i=[];var o;for(o in t)e(t[o],a-1).forEach(function(e){i.push([o].concat(e))});return i},t.flattenIter=function(e,t,a){!function e(t,a,i,o){var n;var s;if(0===a)return(n=i.slice(0)).push(t),void o(n);r.ok(null!==t);r.equal(typeof t,"object");r.equal(typeof a,"number");r.ok(a>=0);for(s in t)(n=i.slice(0)).push(s),e(t[s],a-1,n,o)}(e,t,[],a)},t.validateJsonObject=O,t.validateJsonObjectJS=O,t.randElt=function(e){return r.ok(Array.isArray(e)&&e.length>0,"randElt argument must be a non-empty array"),e[Math.floor(Math.random()*e.length)]},t.extraProperties=function(e,t){r.ok("object"==typeof e&&null!==e,"obj argument must be a non-null object"),r.ok(Array.isArray(t),"allowed argument must be an array of strings");for(var a=0;a=2,"options.base >= 2"),r.ok(o.base<=36,"options.base <= 36"),r.bool(o.allowSign,"options.allowSign"),r.bool(o.allowPrefix,"options.allowPrefix"),r.bool(o.allowTrailing,"options.allowTrailing"),r.bool(o.allowImprecise,"options.allowImprecise"),r.bool(o.trimWhitespace,"options.trimWhitespace"),r.bool(o.leadingZeroIsOctal,"options.leadingZeroIsOctal"),o.leadingZeroIsOctal&&r.ok(!i,'"base" and "leadingZeroIsOctal" are mutually exclusive'));var n,c=-1,u=o.base,h=1,d=0,f=0,k=e.length;if(o.trimWhitespace)for(;fp||x=h&&e<=d?e-F:e>=f&&e<=k?e-P:e>=x&&e<=E?e-z:-1}function A(e){return 32===e||e>=9&&e<=13||160===e||5760===e||6158===e||e>=8192&&e<=8202||8232===e||8233===e||8239===e||8287===e||12288===e||65279===e}function O(e,t){var a=n.validate(t,e);if(0===a.errors.length)return null;var r,i,s=a.errors[0],c=s.property,u=s.message.toLowerCase();-1!=(r=u.indexOf("the property "))&&-1!=(i=u.indexOf(" is not defined in the schema and the schema does not allow additional properties"))&&(r+="the property ".length,c=""===c?u.substr(r,i-r):c+"."+u.substr(r,i-r),u="unsupported property");var p=new o.VError('property "%s": %s',c,u);return p.jsv_details=s,p}function q(e){r.ok(e[0]>=0&&e[1]>=0,"negative numbers not allowed in hrtimes"),r.ok(e[1]<1e9,"nanoseconds column overflow")}function T(e,t){q(e),q(t),r.ok(e[0]>t[0]||e[0]==t[0]&&e[1]>=t[1],"negative differences not allowed");var a=[e[0]-t[0],0];return e[1]>=t[1]?a[1]=e[1]-t[1]:(a[0]--,a[1]=1e9-(t[1]-e[1])),a}function B(e,t){return q(e),q(t),e[1]+=t[1],e[1]>=1e9&&(e[0]++,e[1]-=1e9),e[0]+=t[0],e}function D(e,t,a){var r,i;if(r={},a)for(i in a)r[i]=a[i];if(e)for(i in e)r[i]=e[i];if(t)for(i in t)r[i]=t[i];return r}},function(e,t,a){var r=a(0),i=a(4),o=a(69),n=a(160).isError,s=o.sprintf;function c(e){var t,a,i,o;if(r.object(e,"args"),r.bool(e.strict,"args.strict"),r.array(e.argv,"args.argv"),0===(t=e.argv).length)a={},i=[];else if(n(t[0]))a={cause:t[0]},i=t.slice(1);else if("object"==typeof t[0]){for(o in a={},t[0])a[o]=t[0][o];i=t.slice(1)}else r.string(t[0],"first argument to VError, SError, or WError constructor must be a string, object, or Error"),a={},i=t;return r.object(a),a.strict||e.strict||(i=i.map(function(e){return null===e?"null":void 0===e?"undefined":e})),{options:a,shortmessage:0===i.length?"":s.apply(null,i)}}function u(){var e,t,a,i,o,s,p;if(e=Array.prototype.slice.call(arguments,0),!(this instanceof u))return t=Object.create(u.prototype),u.apply(t,arguments),t;if((a=c({argv:e,strict:!1})).options.name&&(r.string(a.options.name,'error\'s "name" must be a string'),this.name=a.options.name),this.jse_shortmsg=a.shortmessage,s=a.shortmessage,(i=a.options.cause)&&(r.ok(n(i),"cause is not an Error"),this.jse_cause=i,a.options.skipCauseMessage||(s+=": "+i.message)),this.jse_info={},a.options.info)for(p in a.options.info)this.jse_info[p]=a.options.info[p];return this.message=s,Error.call(this,s),Error.captureStackTrace&&(o=a.options.constructorOpt||this.constructor,Error.captureStackTrace(this,o)),this}function p(){var e,t,a,r;return e=Array.prototype.slice.call(arguments,0),this instanceof p?(r=(a=c({argv:e,strict:!0})).options,u.call(this,r,"%s",a.shortmessage),this):(t=Object.create(p.prototype),p.apply(t,arguments),t)}function l(e){r.array(e,"list of errors"),r.ok(e.length>0,"must be at least one error"),this.ase_errors=e,u.call(this,{cause:e[0]},"first of %d error%s",e.length,1==e.length?"":"s")}function m(){var e,t,a,r;return e=Array.prototype.slice.call(arguments,0),this instanceof m?((r=(a=c({argv:e,strict:!1})).options).skipCauseMessage=!0,u.call(this,r,"%s",a.shortmessage),this):(t=Object.create(m.prototype),m.apply(t,e),t)}e.exports=u,u.VError=u,u.SError=p,u.WError=m,u.MultiError=l,i.inherits(u,Error),u.prototype.name="VError",u.prototype.toString=function(){var e=this.hasOwnProperty("name")&&this.name||this.constructor.name||this.constructor.prototype.name;return this.message&&(e+=": "+this.message),e},u.prototype.cause=function(){var e=u.cause(this);return null===e?void 0:e},u.cause=function(e){return r.ok(n(e),"err must be an Error"),n(e.jse_cause)?e.jse_cause:null},u.info=function(e){var t,a,i;if(r.ok(n(e),"err must be an Error"),t=null!==(a=u.cause(e))?u.info(a):{},"object"==typeof e.jse_info&&null!==e.jse_info)for(i in e.jse_info)t[i]=e.jse_info[i];return t},u.findCauseByName=function(e,t){var a;for(r.ok(n(e),"err must be an Error"),r.string(t,"name"),r.ok(t.length>0,"name cannot be empty"),a=e;null!==a;a=u.cause(a))if(r.ok(n(a)),a.name==t)return a;return null},u.hasCauseWithName=function(e,t){return null!==u.findCauseByName(e,t)},u.fullStack=function(e){r.ok(n(e),"err must be an Error");var t=u.cause(e);return t?e.stack+"\ncaused by: "+u.fullStack(t):e.stack},u.errorFromList=function(e){return r.arrayOfObject(e,"errors"),0===e.length?null:(e.forEach(function(e){r.ok(n(e))}),1==e.length?e[0]:new l(e))},u.errorForEach=function(e,t){r.ok(n(e),"err must be an Error"),r.func(t,"func"),e instanceof l?e.errors().forEach(function(e){t(e)}):t(e)},i.inherits(p,u),i.inherits(l,u),l.prototype.name="MultiError",l.prototype.errors=function(){return this.ase_errors.slice(0)},i.inherits(m,u),m.prototype.name="WError",m.prototype.toString=function(){var e=this.hasOwnProperty("name")&&this.name||this.constructor.name||this.constructor.prototype.name;return this.message&&(e+=": "+this.message),this.jse_cause&&this.jse_cause.message&&(e+="; caused by "+this.jse_cause.toString()),e},m.prototype.cause=function(e){return n(e)&&(this.jse_cause=e),this.jse_cause}},function(e,t){function a(e){return Object.prototype.toString.call(e)}t.isArray=function(e){return Array.isArray?Array.isArray(e):"[object Array]"===a(e)},t.isBoolean=function(e){return"boolean"==typeof e},t.isNull=function(e){return null===e},t.isNullOrUndefined=function(e){return null==e},t.isNumber=function(e){return"number"==typeof e},t.isString=function(e){return"string"==typeof e},t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=function(e){return void 0===e},t.isRegExp=function(e){return"[object RegExp]"===a(e)},t.isObject=function(e){return"object"==typeof e&&null!==e},t.isDate=function(e){return"[object Date]"===a(e)},t.isError=function(e){return"[object Error]"===a(e)||e instanceof Error},t.isFunction=function(e){return"function"==typeof e},t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=Buffer.isBuffer},function(e,t,a){var r;void 0===(r=function(){return function(){var e=a;e.Integer={type:"integer"};var t={String:String,Boolean:Boolean,Number:Number,Object:Object,Array:Array,Date:Date};function a(e,t){return a(e,t,{changing:!1})}e.validate=a,e.checkPropertyChange=function(e,t,r){return a(e,t,{changing:r||"property"})};var a=e._validate=function(e,a,r){r||(r={});var i=r.changing;function o(e){return e.type||t[e.name]==e&&e.name.toLowerCase()}var n=[];function s(e,t,a,c){var u;function p(e){n.push({property:a,message:e})}if(a+=a?"number"==typeof c?"["+c+"]":void 0===c?"":"."+c:c,("object"!=typeof t||t instanceof Array)&&(a||"function"!=typeof t)&&(!t||!o(t)))return"function"==typeof t?e instanceof t||p("is not an instance of the class/constructor "+t.name):t&&p("Invalid schema/property definition "+t),null;function l(e,t){if(e){if(!("string"!=typeof e||"any"==e||("null"==e?null===t:typeof t==e)||t instanceof Array&&"array"==e||t instanceof Date&&"date"==e||"integer"==e&&t%1==0))return[{property:a,message:typeof t+" value found, but a "+e+" is required"}];if(e instanceof Array){for(var r=[],i=0;it.maxItems&&p("There must be a maximum of "+t.maxItems+" in the array")}else(t.properties||t.additionalProperties)&&n.concat(function(e,t,a,o){if("object"==typeof t)for(var c in("object"!=typeof e||e instanceof Array)&&n.push({property:a,message:"an object is required"}),t)if(t.hasOwnProperty(c)){var u=e[c];if(void 0===u&&r.existingOnly)continue;var p=t[c];void 0===u&&p.default&&(u=e[c]=p.default),r.coerce&&c in e&&(u=e[c]=r.coerce(u,p)),s(u,p,a,c)}for(c in e){if(e.hasOwnProperty(c)&&("_"!=c.charAt(0)||"_"!=c.charAt(1))&&t&&!t[c]&&!1===o){if(r.filter){delete e[c];continue}n.push({property:a,message:typeof u+"The property "+c+" is not defined in the schema and the schema does not allow additional properties"})}var l=t&&t[c]&&t[c].requires;!l||l in e||n.push({property:a,message:"the presence of the property "+c+" requires that "+l+" also be present"}),u=e[c],!o||t&&"object"==typeof t&&c in t||(r.coerce&&(u=e[c]=r.coerce(u,o)),s(u,o,a,c)),!i&&u&&u.$schema&&(n=n.concat(s(u,u.$schema,a,c)))}return n}(e,t.properties,a,t.additionalProperties));if(t.pattern&&"string"==typeof e&&!e.match(t.pattern)&&p("does not match the regex pattern "+t.pattern),t.maxLength&&"string"==typeof e&&e.length>t.maxLength&&p("may only be "+t.maxLength+" characters long"),t.minLength&&"string"==typeof e&&e.lengthe&&p("must have a minimum value of "+t.minimum),void 0!==typeof t.maximum&&typeof e==typeof t.maximum&&t.maximum0&&!e.useChunkedEncodingByDefault){var o=this.freeSockets[r].pop();o.removeListener("error",o._onIdleError),delete o._onIdleError,e._reusedSocket=!0,e.onSocket(o)}else this.addRequestNoreuse(e,t,a)},u.prototype.removeSocket=function(e,t,a,r){var i;this.sockets[t]?-1!==(i=this.sockets[t].indexOf(e))&&this.sockets[t].splice(i,1):this.sockets[t]&&0===this.sockets[t].length&&(delete this.sockets[t],delete this.requests[t]);this.freeSockets[t]&&(-1!==(i=this.freeSockets[t].indexOf(e))&&(this.freeSockets[t].splice(i,1),0===this.freeSockets[t].length&&delete this.freeSockets[t]));this.requests[t]&&this.requests[t].length&&this.createSocket(t,a,r).emit("free")},r.inherits(p,u),p.prototype.createConnection=function(e,t,a){a="object"==typeof e?e:"object"==typeof t?t:"object"==typeof a?a:{};"number"==typeof e&&(a.port=e);"string"==typeof t&&(a.host=t);return n.connect(a)},p.prototype.addRequestNoreuse=s.prototype.addRequest},function(e,t,a){var r=a(73),i=a(4),o=a(71),n=a(20),s=a(29),c=a(13).parse,u=a(74),p=a(70),l=a(169),m=a(173);function h(e){if(!(this instanceof h))return new h;for(var t in this._overheadLength=0,this._valueLength=0,this._valuesToMeasure=[],r.call(this),e=e||{})this[t]=e[t]}e.exports=h,i.inherits(h,r),h.LINE_BREAK="\r\n",h.DEFAULT_CONTENT_TYPE="application/octet-stream",h.prototype.append=function(e,t,a){"string"==typeof(a=a||{})&&(a={filename:a});var o=r.prototype.append.bind(this);if("number"==typeof t&&(t=""+t),i.isArray(t))this._error(new Error("Arrays are not supported."));else{var n=this._multiPartHeader(e,t,a),s=this._multiPartFooter();o(n),o(t),o(s),this._trackLength(n,t,a)}},h.prototype._trackLength=function(e,t,a){var r=0;null!=a.knownLength?r+=+a.knownLength:Buffer.isBuffer(t)?r=t.length:"string"==typeof t&&(r=Buffer.byteLength(t)),this._valueLength+=r,this._overheadLength+=Buffer.byteLength(e)+h.LINE_BREAK.length,t&&(t.path||t.readable&&t.hasOwnProperty("httpVersion"))&&(a.knownLength||this._valuesToMeasure.push(t))},h.prototype._lengthRetriever=function(e,t){e.hasOwnProperty("fd")?null!=e.end&&e.end!=1/0&&null!=e.start?t(null,e.end+1-(e.start?e.start:0)):u.stat(e.path,function(a,r){var i;a?t(a):(i=r.size-(e.start?e.start:0),t(null,i))}):e.hasOwnProperty("httpVersion")?t(null,+e.headers["content-length"]):e.hasOwnProperty("httpModule")?(e.on("response",function(a){e.pause(),t(null,+a.headers["content-length"])}),e.resume()):t("Unknown stream")},h.prototype._multiPartHeader=function(e,t,a){if("string"==typeof a.header)return a.header;var r,i=this._getContentDisposition(t,a),o=this._getContentType(t,a),n="",s={"Content-Disposition":["form-data",'name="'+e+'"'].concat(i||[]),"Content-Type":[].concat(o||[])};for(var c in"object"==typeof a.header&&m(s,a.header),s)s.hasOwnProperty(c)&&null!=(r=s[c])&&(Array.isArray(r)||(r=[r]),r.length&&(n+=c+": "+r.join("; ")+h.LINE_BREAK));return"--"+this.getBoundary()+h.LINE_BREAK+n+h.LINE_BREAK},h.prototype._getContentDisposition=function(e,t){var a,r;return"string"==typeof t.filepath?a=o.normalize(t.filepath).replace(/\\/g,"/"):t.filename||e.name||e.path?a=o.basename(t.filename||e.name||e.path):e.readable&&e.hasOwnProperty("httpVersion")&&(a=o.basename(e.client._httpMessage.path)),a&&(r='filename="'+a+'"'),r},h.prototype._getContentType=function(e,t){var a=t.contentType;return!a&&e.name&&(a=p.lookup(e.name)),!a&&e.path&&(a=p.lookup(e.path)),!a&&e.readable&&e.hasOwnProperty("httpVersion")&&(a=e.headers["content-type"]),a||!t.filepath&&!t.filename||(a=p.lookup(t.filepath||t.filename)),a||"object"!=typeof e||(a=h.DEFAULT_CONTENT_TYPE),a},h.prototype._multiPartFooter=function(){return function(e){var t=h.LINE_BREAK;0===this._streams.length&&(t+=this._lastBoundary()),e(t)}.bind(this)},h.prototype._lastBoundary=function(){return"--"+this.getBoundary()+"--"+h.LINE_BREAK},h.prototype.getHeaders=function(e){var t,a={"content-type":"multipart/form-data; boundary="+this.getBoundary()};for(t in e)e.hasOwnProperty(t)&&(a[t.toLowerCase()]=e[t]);return a},h.prototype.getBoundary=function(){return this._boundary||this._generateBoundary(),this._boundary},h.prototype._generateBoundary=function(){for(var e="--------------------------",t=0;t<24;t++)e+=Math.floor(10*Math.random()).toString(16);this._boundary=e},h.prototype.getLengthSync=function(){var e=this._overheadLength+this._valueLength;return this._streams.length&&(e+=this._lastBoundary().length),this.hasKnownLength()||this._error(new Error("Cannot calculate proper length in synchronous way.")),e},h.prototype.hasKnownLength=function(){var e=!0;return this._valuesToMeasure.length&&(e=!1),e},h.prototype.getLength=function(e){var t=this._overheadLength+this._valueLength;this._streams.length&&(t+=this._lastBoundary().length),this._valuesToMeasure.length?l.parallel(this._valuesToMeasure,this._lengthRetriever,function(a,r){a?e(a):(r.forEach(function(e){t+=e}),e(null,t))}):process.nextTick(e.bind(this,null,t))},h.prototype.submit=function(e,t){var a,r,i={method:"post"};return"string"==typeof e?(e=c(e),r=m({port:e.port,path:e.pathname,host:e.hostname,protocol:e.protocol},i)):(r=m(e,i)).port||(r.port="https:"==r.protocol?443:80),r.headers=this.getHeaders(e.headers),a="https:"==r.protocol?s.request(r):n.request(r),this.getLength(function(e,r){e?this._error(e):(a.setHeader("Content-Length",r),this.pipe(a),t&&(a.on("error",t),a.on("response",t.bind(this,null))))}.bind(this)),a},h.prototype._error=function(e){this.error||(this.error=e,this.pause(),this.emit("error",e))},h.prototype.toString=function(){return"[object FormData]"}},function(e,t,a){var r=a(17).Stream,i=a(4);function o(){this.source=null,this.dataSize=0,this.maxDataSize=1048576,this.pauseStream=!0,this._maxDataSizeExceeded=!1,this._released=!1,this._bufferedEvents=[]}e.exports=o,i.inherits(o,r),o.create=function(e,t){var a=new this;for(var r in t=t||{})a[r]=t[r];a.source=e;var i=e.emit;return e.emit=function(){return a._handleEmit(arguments),i.apply(e,arguments)},e.on("error",function(){}),a.pauseStream&&e.pause(),a},Object.defineProperty(o.prototype,"readable",{configurable:!0,enumerable:!0,get:function(){return this.source.readable}}),o.prototype.setEncoding=function(){return this.source.setEncoding.apply(this.source,arguments)},o.prototype.resume=function(){this._released||this.release(),this.source.resume()},o.prototype.pause=function(){this.source.pause()},o.prototype.release=function(){this._released=!0,this._bufferedEvents.forEach(function(e){this.emit.apply(this,e)}.bind(this)),this._bufferedEvents=[]},o.prototype.pipe=function(){var e=r.prototype.pipe.apply(this,arguments);return this.resume(),e},o.prototype._handleEmit=function(e){this._released?this.emit.apply(this,e):("data"===e[0]&&(this.dataSize+=e[1].length,this._checkIfMaxDataSizeExceeded()),this._bufferedEvents.push(e))},o.prototype._checkIfMaxDataSizeExceeded=function(){if(!(this._maxDataSizeExceeded||this.dataSize<=this.maxDataSize)){this._maxDataSizeExceeded=!0;var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this.emit("error",new Error(e))}}},function(e,t){e.exports=function(e){var t="function"==typeof setImmediate?setImmediate:"object"==typeof process&&"function"==typeof process.nextTick?process.nextTick:null;t?t(e):setTimeout(e,0)}},function(e,t,a){e.exports={parallel:a(170),serial:a(172),serialOrdered:a(80)}},function(e,t,a){var r=a(75),i=a(78),o=a(79);e.exports=function(e,t,a){var n=i(e);for(;n.index<(n.keyedList||e).length;)r(e,t,n,function(e,t){e?a(e,t):0!==Object.keys(n.jobs).length||a(null,n.results)}),n.index++;return o.bind(n,a)}},function(e,t){e.exports=function(e){var t="function"==typeof setImmediate?setImmediate:"object"==typeof process&&"function"==typeof process.nextTick?process.nextTick:null;t?t(e):setTimeout(e,0)}},function(e,t,a){var r=a(80);e.exports=function(e,t,a){return r(e,t,null,a)}},function(e,t){e.exports=function(e,t){return Object.keys(t).forEach(function(a){e[a]=e[a]||t[a]}),e}},function(e,t){e.exports=i,i.strict=o,i.loose=n;var a=Object.prototype.toString,r={"[object Int8Array]":!0,"[object Int16Array]":!0,"[object Int32Array]":!0,"[object Uint8Array]":!0,"[object Uint8ClampedArray]":!0,"[object Uint16Array]":!0,"[object Uint32Array]":!0,"[object Float32Array]":!0,"[object Float64Array]":!0};function i(e){return o(e)||n(e)}function o(e){return e instanceof Int8Array||e instanceof Int16Array||e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Uint16Array||e instanceof Uint32Array||e instanceof Float32Array||e instanceof Float64Array}function n(e){return r[a.call(e)]}},function(e,t,a){"use strict";function r(e){return e.replace(/^\.*/,".").toLowerCase()}function i(e){var t=(e=e.trim().toLowerCase()).split(":",2);return{hostname:r(t[0]),port:t[1],hasPort:e.indexOf(":")>-1}}e.exports=function(e){var t=process.env.NO_PROXY||process.env.no_proxy||"";return"*"===t?null:""!==t&&function(e,t){var a=e.port||("https:"===e.protocol?"443":"80"),o=r(e.hostname);return t.split(",").map(i).some(function(e){var t=o.indexOf(e.hostname),r=t>-1&&t===o.length-e.hostname.length;return e.hasPort?a===e.port&&r:r})}(e,t)?null:"http:"===e.protocol?process.env.HTTP_PROXY||process.env.http_proxy||null:"https:"===e.protocol&&(process.env.HTTPS_PROXY||process.env.https_proxy||process.env.HTTP_PROXY||process.env.http_proxy)||null}},function(e,t,a){"use strict";var r=a(82),i=a(37);function o(e){this.request=e,this.lib=null,this.useQuerystring=null,this.parseOptions=null,this.stringifyOptions=null}o.prototype.init=function(e){this.lib||(this.useQuerystring=e.useQuerystring,this.lib=this.useQuerystring?i:r,this.parseOptions=e.qsParseOptions||{},this.stringifyOptions=e.qsStringifyOptions||{})},o.prototype.stringify=function(e){return this.useQuerystring?this.rfc3986(this.lib.stringify(e,this.stringifyOptions.sep||null,this.stringifyOptions.eq||null,this.stringifyOptions)):this.lib.stringify(e,this.stringifyOptions)},o.prototype.parse=function(e){return this.useQuerystring?this.lib.parse(e,this.parseOptions.sep||null,this.parseOptions.eq||null,this.parseOptions):this.lib.parse(e,this.parseOptions)},o.prototype.rfc3986=function(e){return e.replace(/[!'()*]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})},o.prototype.unescape=i.unescape,t.Querystring=o},function(e,t,a){"use strict";var r=a(83),i=a(84),o={brackets:function(e){return e+"[]"},indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},n=Date.prototype.toISOString,s={delimiter:"&",encode:!0,encoder:r.encode,encodeValuesOnly:!1,serializeDate:function(e){return n.call(e)},skipNulls:!1,strictNullHandling:!1},c=function e(t,a,i,o,n,c,u,p,l,m,h,d){var f=t;if("function"==typeof u)f=u(a,f);else if(f instanceof Date)f=m(f);else if(null===f){if(o)return c&&!d?c(a,s.encoder):a;f=""}if("string"==typeof f||"number"==typeof f||"boolean"==typeof f||r.isBuffer(f))return c?[h(d?a:c(a,s.encoder))+"="+h(c(f,s.encoder))]:[h(a)+"="+h(String(f))];var g,v=[];if(void 0===f)return v;if(Array.isArray(u))g=u;else{var y=Object.keys(f);g=p?y.sort(p):y}for(var b=0;b0?F+E:""}},function(e,t,a){"use strict";var r=a(83),i=Object.prototype.hasOwnProperty,o={allowDots:!1,allowPrototypes:!1,arrayLimit:20,decoder:r.decode,delimiter:"&",depth:5,parameterLimit:1e3,plainObjects:!1,strictNullHandling:!1},n=function(e,t,a){if(e){var r=a.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,o=/(\[[^[\]]*])/g,n=/(\[[^[\]]*])/.exec(r),s=n?r.slice(0,n.index):r,c=[];if(s){if(!a.plainObjects&&i.call(Object.prototype,s)&&!a.allowPrototypes)return;c.push(s)}for(var u=0;null!==(n=o.exec(r))&&u=0;--i){var o,n=e[i];if("[]"===n)o=(o=[]).concat(r);else{o=a.plainObjects?Object.create(null):{};var s="["===n.charAt(0)&&"]"===n.charAt(n.length-1)?n.slice(1,-1):n,c=parseInt(s,10);!isNaN(c)&&n!==s&&String(c)===s&&c>=0&&a.parseArrays&&c<=a.arrayLimit?(o=[])[c]=r:o[s]=r}r=o}return r}(c,t,a)}};e.exports=function(e,t){var a=t?r.assign({},t):{};if(null!==a.decoder&&void 0!==a.decoder&&"function"!=typeof a.decoder)throw new TypeError("Decoder has to be a function.");if(a.ignoreQueryPrefix=!0===a.ignoreQueryPrefix,a.delimiter="string"==typeof a.delimiter||r.isRegExp(a.delimiter)?a.delimiter:o.delimiter,a.depth="number"==typeof a.depth?a.depth:o.depth,a.arrayLimit="number"==typeof a.arrayLimit?a.arrayLimit:o.arrayLimit,a.parseArrays=!1!==a.parseArrays,a.decoder="function"==typeof a.decoder?a.decoder:o.decoder,a.allowDots="boolean"==typeof a.allowDots?a.allowDots:o.allowDots,a.plainObjects="boolean"==typeof a.plainObjects?a.plainObjects:o.plainObjects,a.allowPrototypes="boolean"==typeof a.allowPrototypes?a.allowPrototypes:o.allowPrototypes,a.parameterLimit="number"==typeof a.parameterLimit?a.parameterLimit:o.parameterLimit,a.strictNullHandling="boolean"==typeof a.strictNullHandling?a.strictNullHandling:o.strictNullHandling,""===e||null==e)return a.plainObjects?Object.create(null):{};for(var s="string"==typeof e?function(e,t){for(var a={},r=t.ignoreQueryPrefix?e.replace(/^\?/,""):e,n=t.parameterLimit===1/0?void 0:t.parameterLimit,s=r.split(t.delimiter,n),c=0;c=0?{index:r,compiling:!0}:(r=this._compilations.length,this._compilations[r]={schema:e,root:t,baseId:a},{index:r,compiling:!1})}.call(this,t,a,y);var z=this._compilations[P.index];if(P.compiling)return z.callValidate=function e(){var t=z.validate;var a=t.apply(this,arguments);e.errors=t.errors;return a};var C=this._formats;var A=this.RULES;try{var O=T(t,a,v,y);z.validate=O;var q=z.callValidate;return q&&(q.schema=O.schema,q.errors=null,q.refs=O.refs,q.refVal=O.refVal,q.root=O.root,q.$async=O.$async,k.sourceCode&&(q.source=O.source)),O}finally{(function(e,t,a){var r=l.call(this,e,t,a);r>=0&&this._compilations.splice(r,1)}).call(this,t,a,y)}function T(t,n,l,v){var y=!n||n&&n.schema==t;if(n.schema!=a.schema)return e.call(b,t,n,l,v);var _,E=!0===t.$async,P=s({isTop:!0,schema:t,isRoot:y,baseId:v,root:n,schemaPath:"",errSchemaPath:"#",errorPath:'""',MissingRefError:o.MissingRef,RULES:A,validate:s,util:i,resolve:r,resolveRef:B,usePattern:R,useDefault:N,useCustomRule:L,opts:k,formats:C,logger:b.logger,self:b});P=g(x,d)+g(j,m)+g(S,h)+g(F,f)+P,k.processCode&&(P=k.processCode(P));try{var z=new Function("self","RULES","formats","root","refVal","defaults","customRules","equal","ucs2length","ValidationError",P);_=z(b,A,C,a,x,S,F,u,c,p),x[0]=_}catch(e){throw b.logger.error("Error compiling schema, function code:",P),e}return _.schema=t,_.errors=null,_.refs=w,_.refVal=x,_.root=y?_:n,E&&(_.$async=!0),!0===k.sourceCode&&(_.source={code:P,patterns:j,defaults:S}),_}function B(t,i,o){i=r.url(t,i);var n,s,c=w[i];if(void 0!==c)return I(n=x[c],s="refVal["+c+"]");if(!o&&a.refs){var u=a.refs[i];if(void 0!==u)return n=a.refVal[u],s=D(i,n),I(n,s)}s=D(i);var p=r.call(b,T,a,i);if(void 0===p){var l=v&&v[i];l&&(p=r.inlineRef(l,k.inlineRefs)?l:e.call(b,l,a,v,t))}if(void 0!==p)return function(e,t){var a=w[e];x[a]=t}(i,p),I(p,s);!function(e){delete w[e]}(i)}function D(e,t){var a=x.length;return x[a]=t,w[e]=a,"refVal"+a}function I(e,t){return"object"==typeof e||"boolean"==typeof e?{code:t,schema:e,inline:!0}:{code:t,$async:e&&!!e.$async}}function R(e){var t=_[e];return void 0===t&&(t=_[e]=j.length,j[t]=e),"pattern"+t}function N(e){switch(typeof e){case"boolean":case"number":return""+e;case"string":return i.toQuotedString(e);case"object":if(null===e)return"null";var t=n(e),a=E[t];return void 0===a&&(a=E[t]=S.length,S[a]=e),"default"+a}}function L(e,t,a,r){var i=e.definition.validateSchema;if(i&&!1!==b._opts.validateSchema){var o=i(t);if(!o){var n="keyword schema is invalid: "+b.errorsText(i.errors);if("log"!=b._opts.validateSchema)throw new Error(n);b.logger.error(n)}}var s,c=e.definition.compile,u=e.definition.inline,p=e.definition.macro;if(c)s=c.call(b,t,a,r);else if(p)s=p.call(b,t,a,r),!1!==k.validateSchema&&b.validateSchema(s,!0);else if(u)s=u.call(b,r,e.keyword,t,a);else if(!(s=e.definition.validate))return;if(void 0===s)throw new Error('custom keyword "'+e.keyword+'"failed to compile');var l=F.length;return F[l]=s,{code:"customRule"+l,validate:s}}}},function(e,t,a){ /** @license URI.js v4.2.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */ !function(e){"use strict";function t(){for(var e=arguments.length,t=Array(e),a=0;a1){t[0]=t[0].slice(0,-1);for(var r=t.length-1,i=1;i= 0x80 (not a basic code point)","invalid-input":"Invalid input"},d=Math.floor,f=String.fromCharCode;function g(e){throw new RangeError(h[e])}function v(e,t){var a=e.split("@"),r="";a.length>1&&(r=a[0]+"@",e=a[1]);var i=(e=e.replace(m,".")).split("."),o=function(e,t){for(var a=[],r=e.length;r--;)a[r]=t(e[r]);return a}(i,t).join(".");return r+o}function y(e){for(var t=[],a=0,r=e.length;a=55296&&i<=56319&&a>1,e+=d(e/t);e>455;r+=36)e=d(e/35);return d(r+36*e/(e+38))},x=function(e){var t,a=[],r=e.length,i=0,o=128,n=72,s=e.lastIndexOf("-");s<0&&(s=0);for(var c=0;c=128&&g("not-basic"),a.push(e.charCodeAt(c));for(var p=s>0?s+1:0;p=r&&g("invalid-input");var f=(t=e.charCodeAt(p++))-48<10?t-22:t-65<26?t-65:t-97<26?t-97:36;(f>=36||f>d((u-i)/m))&&g("overflow"),i+=f*m;var v=h<=n?1:h>=n+26?26:h-n;if(fd(u/y)&&g("overflow"),m*=y}var b=a.length+1;n=k(i-l,b,0==l),d(i/b)>u-o&&g("overflow"),o+=d(i/b),i%=b,a.splice(i++,0,o)}return String.fromCodePoint.apply(String,a)},w=function(e){var t=[],a=(e=y(e)).length,r=128,i=0,o=72,n=!0,s=!1,c=void 0;try{for(var p,l=e[Symbol.iterator]();!(n=(p=l.next()).done);n=!0){var m=p.value;m<128&&t.push(f(m))}}catch(e){s=!0,c=e}finally{try{!n&&l.return&&l.return()}finally{if(s)throw c}}var h=t.length,v=h;for(h&&t.push("-");v=r&&Fd((u-i)/P)&&g("overflow"),i+=(x-r)*P,r=x;var z=!0,C=!1,A=void 0;try{for(var O,q=e[Symbol.iterator]();!(z=(O=q.next()).done);z=!0){var T=O.value;if(Tu&&g("overflow"),T==r){for(var B=i,D=36;;D+=36){var I=D<=o?1:D>=o+26?26:D-o;if(B>6|192).toString(16).toUpperCase()+"%"+(63&t|128).toString(16).toUpperCase():"%"+(t>>12|224).toString(16).toUpperCase()+"%"+(t>>6&63|128).toString(16).toUpperCase()+"%"+(63&t|128).toString(16).toUpperCase()}function E(e){for(var t="",a=0,r=e.length;a=194&&i<224){if(r-a>=6){var o=parseInt(e.substr(a+4,2),16);t+=String.fromCharCode((31&i)<<6|63&o)}else t+=e.substr(a,6);a+=6}else if(i>=224){if(r-a>=9){var n=parseInt(e.substr(a+4,2),16),s=parseInt(e.substr(a+7,2),16);t+=String.fromCharCode((15&i)<<12|(63&n)<<6|63&s)}else t+=e.substr(a,9);a+=9}else t+=e.substr(a,3),a+=3}return t}function F(e,t){function a(e){var a=E(e);return a.match(t.UNRESERVED)?a:e}return e.scheme&&(e.scheme=String(e.scheme).replace(t.PCT_ENCODED,a).toLowerCase().replace(t.NOT_SCHEME,"")),void 0!==e.userinfo&&(e.userinfo=String(e.userinfo).replace(t.PCT_ENCODED,a).replace(t.NOT_USERINFO,S).replace(t.PCT_ENCODED,i)),void 0!==e.host&&(e.host=String(e.host).replace(t.PCT_ENCODED,a).toLowerCase().replace(t.NOT_HOST,S).replace(t.PCT_ENCODED,i)),void 0!==e.path&&(e.path=String(e.path).replace(t.PCT_ENCODED,a).replace(e.scheme?t.NOT_PATH:t.NOT_PATH_NOSCHEME,S).replace(t.PCT_ENCODED,i)),void 0!==e.query&&(e.query=String(e.query).replace(t.PCT_ENCODED,a).replace(t.NOT_QUERY,S).replace(t.PCT_ENCODED,i)),void 0!==e.fragment&&(e.fragment=String(e.fragment).replace(t.PCT_ENCODED,a).replace(t.NOT_FRAGMENT,S).replace(t.PCT_ENCODED,i)),e}function P(e){return e.replace(/^0*(.*)/,"$1")||"0"}function z(e,t){var a=e.match(t.IPV4ADDRESS)||[],r=c(a,2),i=r[1];return i?i.split(".").map(P).join("."):e}function C(e,t){var a=e.match(t.IPV6ADDRESS)||[],r=c(a,3),i=r[1],o=r[2];if(i){for(var n=i.toLowerCase().split("::").reverse(),s=c(n,2),u=s[0],p=s[1],l=p?p.split(":").map(P):[],m=u.split(":").map(P),h=t.IPV4ADDRESS.test(m[m.length-1]),d=h?7:8,f=m.length-d,g=Array(d),v=0;v1){var x=g.slice(0,b.index),w=g.slice(b.index+b.length);k=x.join(":")+"::"+w.join(":")}else k=g.join(":");return o&&(k+="%"+o),k}return e}var A=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i,O=void 0==="".match(/(){0}/)[1];function q(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a={},r=!1!==t.iri?s:n;"suffix"===t.reference&&(e=(t.scheme?t.scheme+":":"")+"//"+e);var i=e.match(A);if(i){O?(a.scheme=i[1],a.userinfo=i[3],a.host=i[4],a.port=parseInt(i[5],10),a.path=i[6]||"",a.query=i[7],a.fragment=i[8],isNaN(a.port)&&(a.port=i[5])):(a.scheme=i[1]||void 0,a.userinfo=-1!==e.indexOf("@")?i[3]:void 0,a.host=-1!==e.indexOf("//")?i[4]:void 0,a.port=parseInt(i[5],10),a.path=i[6]||"",a.query=-1!==e.indexOf("?")?i[7]:void 0,a.fragment=-1!==e.indexOf("#")?i[8]:void 0,isNaN(a.port)&&(a.port=e.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?i[4]:void 0)),a.host&&(a.host=C(z(a.host,r),r)),void 0!==a.scheme||void 0!==a.userinfo||void 0!==a.host||void 0!==a.port||a.path||void 0!==a.query?void 0===a.scheme?a.reference="relative":void 0===a.fragment?a.reference="absolute":a.reference="uri":a.reference="same-document",t.reference&&"suffix"!==t.reference&&t.reference!==a.reference&&(a.error=a.error||"URI is not a "+t.reference+" reference.");var o=_[(t.scheme||a.scheme||"").toLowerCase()];if(t.unicodeSupport||o&&o.unicodeSupport)F(a,r);else{if(a.host&&(t.domainHost||o&&o.domainHost))try{a.host=j.toASCII(a.host.replace(r.PCT_ENCODED,E).toLowerCase())}catch(e){a.error=a.error||"Host's domain name can not be converted to ASCII via punycode: "+e}F(a,n)}o&&o.parse&&o.parse(a,t)}else a.error=a.error||"URI can not be parsed.";return a}var T=/^\.\.?\//,B=/^\/\.(\/|$)/,D=/^\/\.\.(\/|$)/,I=/^\/?(?:.|\n)*?(?=\/|$)/;function R(e){for(var t=[];e.length;)if(e.match(T))e=e.replace(T,"");else if(e.match(B))e=e.replace(B,"/");else if(e.match(D))e=e.replace(D,"/"),t.pop();else if("."===e||".."===e)e="";else{var a=e.match(I);if(!a)throw new Error("Unexpected dot segment condition");var r=a[0];e=e.slice(r.length),t.push(r)}return t.join("")}function N(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=t.iri?s:n,r=[],i=_[(t.scheme||e.scheme||"").toLowerCase()];if(i&&i.serialize&&i.serialize(e,t),e.host)if(a.IPV6ADDRESS.test(e.host));else if(t.domainHost||i&&i.domainHost)try{e.host=t.iri?j.toUnicode(e.host):j.toASCII(e.host.replace(a.PCT_ENCODED,E).toLowerCase())}catch(a){e.error=e.error||"Host's domain name can not be converted to "+(t.iri?"Unicode":"ASCII")+" via punycode: "+a}F(e,a),"suffix"!==t.reference&&e.scheme&&(r.push(e.scheme),r.push(":"));var o=function(e,t){var a=!1!==t.iri?s:n,r=[];return void 0!==e.userinfo&&(r.push(e.userinfo),r.push("@")),void 0!==e.host&&r.push(C(z(String(e.host),a),a).replace(a.IPV6ADDRESS,function(e,t,a){return"["+t+(a?"%25"+a:"")+"]"})),"number"==typeof e.port&&(r.push(":"),r.push(e.port.toString(10))),r.length?r.join(""):void 0}(e,t);if(void 0!==o&&("suffix"!==t.reference&&r.push("//"),r.push(o),e.path&&"/"!==e.path.charAt(0)&&r.push("/")),void 0!==e.path){var c=e.path;t.absolutePath||i&&i.absolutePath||(c=R(c)),void 0===o&&(c=c.replace(/^\/\//,"/%2F")),r.push(c)}return void 0!==e.query&&(r.push("?"),r.push(e.query)),void 0!==e.fragment&&(r.push("#"),r.push(e.fragment)),r.join("")}function L(e,t){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments[3],i={};return r||(e=q(N(e,a),a),t=q(N(t,a),a)),!(a=a||{}).tolerant&&t.scheme?(i.scheme=t.scheme,i.userinfo=t.userinfo,i.host=t.host,i.port=t.port,i.path=R(t.path||""),i.query=t.query):(void 0!==t.userinfo||void 0!==t.host||void 0!==t.port?(i.userinfo=t.userinfo,i.host=t.host,i.port=t.port,i.path=R(t.path||""),i.query=t.query):(t.path?("/"===t.path.charAt(0)?i.path=R(t.path):(void 0===e.userinfo&&void 0===e.host&&void 0===e.port||e.path?e.path?i.path=e.path.slice(0,e.path.lastIndexOf("/")+1)+t.path:i.path=t.path:i.path="/"+t.path,i.path=R(i.path)),i.query=t.query):(i.path=e.path,void 0!==t.query?i.query=t.query:i.query=e.query),i.userinfo=e.userinfo,i.host=e.host,i.port=e.port),i.scheme=e.scheme),i.fragment=t.fragment,i}function U(e,t){return e&&e.toString().replace(t&&t.iri?s.PCT_ENCODED:n.PCT_ENCODED,E)}var H={scheme:"http",domainHost:!0,parse:function(e,t){return e.host||(e.error=e.error||"HTTP URIs must have a host."),e},serialize:function(e,t){return e.port!==("https"!==String(e.scheme).toLowerCase()?80:443)&&""!==e.port||(e.port=void 0),e.path||(e.path="/"),e}},$={scheme:"https",domainHost:H.domainHost,parse:H.parse,serialize:H.serialize},M={},K="[A-Za-z0-9\\-\\.\\_\\~\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]",V="[0-9A-Fa-f]",Q=a(a("%[EFef][0-9A-Fa-f]%"+V+V+"%"+V+V)+"|"+a("%[89A-Fa-f][0-9A-Fa-f]%"+V+V)+"|"+a("%"+V+V)),G=t("[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]",'[\\"\\\\]'),W=new RegExp(K,"g"),Z=new RegExp(Q,"g"),Y=new RegExp(t("[^]","[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]","[\\.]",'[\\"]',G),"g"),J=new RegExp(t("[^]",K,"[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"),"g"),X=J;function ee(e){var t=E(e);return t.match(W)?t:e}var te={scheme:"mailto",parse:function(e,t){var a=e,r=a.to=a.path?a.path.split(","):[];if(a.path=void 0,a.query){for(var i=!1,o={},n=a.query.split("&"),s=0,c=n.length;s=55296&&t<=56319&&i%\\^`{|}]|%[0-9a-f]{2})|\{[+#.\/;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,p=/^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i,l=/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,m=/^(?:\/(?:[^~\/]|~0|~1)*)*$/,h=/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,d=/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~\/]|~0|~1)*)*)$/;function f(e){return e="full"==e?"full":"fast",r.copy(f[e])}function g(e){var t=e.match(i);if(!t)return!1;var a=+t[1],r=+t[2],n=+t[3];return r>=1&&r<=12&&n>=1&&n<=(2==r&&function(e){return e%4==0&&(e%100!=0||e%400==0)}(a)?29:o[r])}function v(e,t){var a=e.match(n);if(!a)return!1;var r=a[1],i=a[2],o=a[3],s=a[5];return(r<=23&&i<=59&&o<=59||23==r&&59==i&&60==o)&&(!t||s)}e.exports=f,f.fast={date:/^\d\d\d\d-[0-1]\d-[0-3]\d$/,time:/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d:\d\d)?$/i,"date-time":/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d:\d\d)$/i,uri:/^(?:[a-z][a-z0-9+-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,"uri-template":u,url:p,email:/^[a-z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,hostname:s,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:x,uuid:l,"json-pointer":m,"json-pointer-uri-fragment":h,"relative-json-pointer":d},f.full={date:g,time:v,"date-time":function(e){var t=e.split(y);return 2==t.length&&g(t[0])&&v(t[1],!0)},uri:function(e){return b.test(e)&&c.test(e)},"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@\/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@\/?]|%[0-9a-f]{2})*)?$/i,"uri-template":u,url:p,email:/^[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:function(e){return e.length<=255&&s.test(e)},ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:x,uuid:l,"json-pointer":m,"json-pointer-uri-fragment":h,"relative-json-pointer":d};var y=/t|\s/i;var b=/\/|:/;var k=/[^\\]\\Z/;function x(e){if(k.test(e))return!1;try{return new RegExp(e),!0}catch(e){return!1}}},function(e,t,a){"use strict";var r=a(189),i=a(18).toHash;e.exports=function(){var e=[{type:"number",rules:[{maximum:["exclusiveMaximum"]},{minimum:["exclusiveMinimum"]},"multipleOf","format"]},{type:"string",rules:["maxLength","minLength","pattern","format"]},{type:"array",rules:["maxItems","minItems","items","contains","uniqueItems"]},{type:"object",rules:["maxProperties","minProperties","required","dependencies","propertyNames",{properties:["additionalProperties","patternProperties"]}]},{rules:["$ref","const","enum","not","anyOf","oneOf","allOf","if"]}],t=["type","$comment"];return e.all=i(t),e.types=i(["number","integer","string","array","object","boolean","null"]),e.forEach(function(a){a.rules=a.rules.map(function(a){var i;if("object"==typeof a){var o=Object.keys(a)[0];i=a[o],a=o,i.forEach(function(a){t.push(a),e.all[a]=!0})}return t.push(a),e.all[a]={keyword:a,code:r[a],implements:i}}),e.all.$comment={keyword:"$comment",code:r.$comment},a.type&&(e.types[a.type]=a)}),e.keywords=i(t.concat(["$schema","$id","id","$data","title","description","default","definitions","examples","readOnly","writeOnly","contentMediaType","contentEncoding","additionalItems","then","else"])),e.custom={},e}},function(e,t,a){"use strict";e.exports={$ref:a(190),allOf:a(191),anyOf:a(192),$comment:a(193),const:a(194),contains:a(195),dependencies:a(196),enum:a(197),format:a(198),if:a(199),items:a(200),maximum:a(88),minimum:a(88),maxItems:a(89),minItems:a(89),maxLength:a(90),minLength:a(90),maxProperties:a(91),minProperties:a(91),multipleOf:a(201),not:a(202),oneOf:a(203),pattern:a(204),properties:a(205),propertyNames:a(206),required:a(207),uniqueItems:a(208),validate:a(87)}},function(e,t,a){"use strict";e.exports=function(e,t,a){var r,i,o=" ",n=e.level,s=e.dataLevel,c=e.schema[t],u=e.errSchemaPath+"/"+t,p=!e.opts.allErrors,l="data"+(s||""),m="valid"+n;if("#"==c||"#/"==c)e.isRoot?(r=e.async,i="validate"):(r=!0===e.root.schema.$async,i="root.refVal[0]");else{var h=e.resolveRef(e.baseId,c,e.isRoot);if(void 0===h){var d=e.MissingRefError.message(e.baseId,c);if("fail"==e.opts.missingRefs){e.logger.error(d),(y=y||[]).push(o),o="",!1!==e.createErrors?(o+=" { keyword: '$ref' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: { ref: '"+e.util.escapeQuotes(c)+"' } ",!1!==e.opts.messages&&(o+=" , message: 'can\\'t resolve reference "+e.util.escapeQuotes(c)+"' "),e.opts.verbose&&(o+=" , schema: "+e.util.toQuotedString(c)+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),o+=" } "):o+=" {} ";var f=o;o=y.pop(),!e.compositeRule&&p?e.async?o+=" throw new ValidationError(["+f+"]); ":o+=" validate.errors = ["+f+"]; return false; ":o+=" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",p&&(o+=" if (false) { ")}else{if("ignore"!=e.opts.missingRefs)throw new e.MissingRefError(e.baseId,c,d);e.logger.warn(d),p&&(o+=" if (true) { ")}}else if(h.inline){var g=e.util.copy(e);g.level++;var v="valid"+g.level;g.schema=h.schema,g.schemaPath="",g.errSchemaPath=c,o+=" "+e.validate(g).replace(/validate\.schema/g,h.code)+" ",p&&(o+=" if ("+v+") { ")}else r=!0===h.$async||e.async&&!1!==h.$async,i=h.code}if(i){var y;(y=y||[]).push(o),o="",e.opts.passContext?o+=" "+i+".call(this, ":o+=" "+i+"( ",o+=" "+l+", (dataPath || '')",'""'!=e.errorPath&&(o+=" + "+e.errorPath);var b=o+=" , "+(s?"data"+(s-1||""):"parentData")+" , "+(s?e.dataPathArr[s]:"parentDataProperty")+", rootData) ";if(o=y.pop(),r){if(!e.async)throw new Error("async schema referenced by sync schema");p&&(o+=" var "+m+"; "),o+=" try { await "+b+"; ",p&&(o+=" "+m+" = true; "),o+=" } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; ",p&&(o+=" "+m+" = false; "),o+=" } ",p&&(o+=" if ("+m+") { ")}else o+=" if (!"+b+") { if (vErrors === null) vErrors = "+i+".errors; else vErrors = vErrors.concat("+i+".errors); errors = vErrors.length; } ",p&&(o+=" else { ")}return o}},function(e,t,a){"use strict";e.exports=function(e,t,a){var r=" ",i=e.schema[t],o=e.schemaPath+e.util.getProperty(t),n=e.errSchemaPath+"/"+t,s=!e.opts.allErrors,c=e.util.copy(e),u="";c.level++;var p="valid"+c.level,l=c.baseId,m=!0,h=i;if(h)for(var d,f=-1,g=h.length-1;f=0)return u&&(r+=" if (true) { "),r;throw new Error('unknown format "'+n+'" is used in schema at path "'+e.errSchemaPath+'"')}var g,v=(g="object"==typeof f&&!(f instanceof RegExp)&&f.validate)&&f.type||"string";if(g){var y=!0===f.async;f=f.validate}if(v!=a)return u&&(r+=" if (true) { "),r;if(y){if(!e.async)throw new Error("async format in sync schema");r+=" if (!(await "+(b="formats"+e.util.getProperty(n)+".validate")+"("+p+"))) { "}else{r+=" if (! ";var b="formats"+e.util.getProperty(n);g&&(b+=".validate"),r+="function"==typeof f?" "+b+"("+p+") ":" "+b+".test("+p+") ",r+=") { "}}var k=k||[];k.push(r),r="",!1!==e.createErrors?(r+=" { keyword: 'format' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { format: ",r+=m?""+l:""+e.util.toQuotedString(n),r+=" } ",!1!==e.opts.messages&&(r+=" , message: 'should match format \"",r+=m?"' + "+l+" + '":""+e.util.escapeQuotes(n),r+="\"' "),e.opts.verbose&&(r+=" , schema: ",r+=m?"validate.schema"+s:""+e.util.toQuotedString(n),r+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+p+" "),r+=" } "):r+=" {} ";var x=r;return r=k.pop(),!e.compositeRule&&u?e.async?r+=" throw new ValidationError(["+x+"]); ":r+=" validate.errors = ["+x+"]; return false; ":r+=" var err = "+x+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",r+=" } ",u&&(r+=" else { "),r}},function(e,t,a){"use strict";e.exports=function(e,t,a){var r=" ",i=e.level,o=e.dataLevel,n=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,p="data"+(o||""),l="valid"+i,m="errs__"+i,h=e.util.copy(e);h.level++;var d="valid"+h.level,f=e.schema.then,g=e.schema.else,v=void 0!==f&&e.util.schemaHasRules(f,e.RULES.all),y=void 0!==g&&e.util.schemaHasRules(g,e.RULES.all),b=h.baseId;if(v||y){var k;h.createErrors=!1,h.schema=n,h.schemaPath=s,h.errSchemaPath=c,r+=" var "+m+" = errors; var "+l+" = true; ";var x=e.compositeRule;e.compositeRule=h.compositeRule=!0,r+=" "+e.validate(h)+" ",h.baseId=b,h.createErrors=!0,r+=" errors = "+m+"; if (vErrors !== null) { if ("+m+") vErrors.length = "+m+"; else vErrors = null; } ",e.compositeRule=h.compositeRule=x,v?(r+=" if ("+d+") { ",h.schema=e.schema.then,h.schemaPath=e.schemaPath+".then",h.errSchemaPath=e.errSchemaPath+"/then",r+=" "+e.validate(h)+" ",h.baseId=b,r+=" "+l+" = "+d+"; ",v&&y?r+=" var "+(k="ifClause"+i)+" = 'then'; ":k="'then'",r+=" } ",y&&(r+=" else { ")):r+=" if (!"+d+") { ",y&&(h.schema=e.schema.else,h.schemaPath=e.schemaPath+".else",h.errSchemaPath=e.errSchemaPath+"/else",r+=" "+e.validate(h)+" ",h.baseId=b,r+=" "+l+" = "+d+"; ",v&&y?r+=" var "+(k="ifClause"+i)+" = 'else'; ":k="'else'",r+=" } "),r+=" if (!"+l+") { var err = ",!1!==e.createErrors?(r+=" { keyword: 'if' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { failingKeyword: "+k+" } ",!1!==e.opts.messages&&(r+=" , message: 'should match \"' + "+k+" + '\" schema' "),e.opts.verbose&&(r+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+p+" "),r+=" } "):r+=" {} ",r+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",!e.compositeRule&&u&&(e.async?r+=" throw new ValidationError(vErrors); ":r+=" validate.errors = vErrors; return false; "),r+=" } ",u&&(r+=" else { "),r=e.util.cleanUpCode(r)}else u&&(r+=" if (true) { ");return r}},function(e,t,a){"use strict";e.exports=function(e,t,a){var r=" ",i=e.level,o=e.dataLevel,n=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,p="data"+(o||""),l="valid"+i,m="errs__"+i,h=e.util.copy(e),d="";h.level++;var f="valid"+h.level,g="i"+i,v=h.dataLevel=e.dataLevel+1,y="data"+v,b=e.baseId;if(r+="var "+m+" = errors;var "+l+";",Array.isArray(n)){var k=e.schema.additionalItems;if(!1===k){r+=" "+l+" = "+p+".length <= "+n.length+"; ";var x=c;c=e.errSchemaPath+"/additionalItems",r+=" if (!"+l+") { ";var w=w||[];w.push(r),r="",!1!==e.createErrors?(r+=" { keyword: 'additionalItems' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { limit: "+n.length+" } ",!1!==e.opts.messages&&(r+=" , message: 'should NOT have more than "+n.length+" items' "),e.opts.verbose&&(r+=" , schema: false , parentSchema: validate.schema"+e.schemaPath+" , data: "+p+" "),r+=" } "):r+=" {} ";var j=r;r=w.pop(),!e.compositeRule&&u?e.async?r+=" throw new ValidationError(["+j+"]); ":r+=" validate.errors = ["+j+"]; return false; ":r+=" var err = "+j+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",r+=" } ",c=x,u&&(d+="}",r+=" else { ")}var _=n;if(_)for(var S,E=-1,F=_.length-1;E "+E+") { ";var P=p+"["+E+"]";h.schema=S,h.schemaPath=s+"["+E+"]",h.errSchemaPath=c+"/"+E,h.errorPath=e.util.getPathExpr(e.errorPath,E,e.opts.jsonPointers,!0),h.dataPathArr[v]=E;var z=e.validate(h);h.baseId=b,e.util.varOccurences(z,y)<2?r+=" "+e.util.varReplace(z,y,P)+" ":r+=" var "+y+" = "+P+"; "+z+" ",r+=" } ",u&&(r+=" if ("+f+") { ",d+="}")}if("object"==typeof k&&e.util.schemaHasRules(k,e.RULES.all)){h.schema=k,h.schemaPath=e.schemaPath+".additionalItems",h.errSchemaPath=e.errSchemaPath+"/additionalItems",r+=" "+f+" = true; if ("+p+".length > "+n.length+") { for (var "+g+" = "+n.length+"; "+g+" < "+p+".length; "+g+"++) { ",h.errorPath=e.util.getPathExpr(e.errorPath,g,e.opts.jsonPointers,!0);P=p+"["+g+"]";h.dataPathArr[v]=g;z=e.validate(h);h.baseId=b,e.util.varOccurences(z,y)<2?r+=" "+e.util.varReplace(z,y,P)+" ":r+=" var "+y+" = "+P+"; "+z+" ",u&&(r+=" if (!"+f+") break; "),r+=" } } ",u&&(r+=" if ("+f+") { ",d+="}")}}else if(e.util.schemaHasRules(n,e.RULES.all)){h.schema=n,h.schemaPath=s,h.errSchemaPath=c,r+=" for (var "+g+" = 0; "+g+" < "+p+".length; "+g+"++) { ",h.errorPath=e.util.getPathExpr(e.errorPath,g,e.opts.jsonPointers,!0);P=p+"["+g+"]";h.dataPathArr[v]=g;z=e.validate(h);h.baseId=b,e.util.varOccurences(z,y)<2?r+=" "+e.util.varReplace(z,y,P)+" ":r+=" var "+y+" = "+P+"; "+z+" ",u&&(r+=" if (!"+f+") break; "),r+=" }"}return u&&(r+=" "+d+" if ("+m+" == errors) {"),r=e.util.cleanUpCode(r)}},function(e,t,a){"use strict";e.exports=function(e,t,a){var r,i=" ",o=e.level,n=e.dataLevel,s=e.schema[t],c=e.schemaPath+e.util.getProperty(t),u=e.errSchemaPath+"/"+t,p=!e.opts.allErrors,l="data"+(n||""),m=e.opts.$data&&s&&s.$data;m?(i+=" var schema"+o+" = "+e.util.getData(s.$data,n,e.dataPathArr)+"; ",r="schema"+o):r=s,i+="var division"+o+";if (",m&&(i+=" "+r+" !== undefined && ( typeof "+r+" != 'number' || "),i+=" (division"+o+" = "+l+" / "+r+", ",e.opts.multipleOfPrecision?i+=" Math.abs(Math.round(division"+o+") - division"+o+") > 1e-"+e.opts.multipleOfPrecision+" ":i+=" division"+o+" !== parseInt(division"+o+") ",i+=" ) ",m&&(i+=" ) "),i+=" ) { ";var h=h||[];h.push(i),i="",!1!==e.createErrors?(i+=" { keyword: 'multipleOf' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: { multipleOf: "+r+" } ",!1!==e.opts.messages&&(i+=" , message: 'should be multiple of ",i+=m?"' + "+r:r+"'"),e.opts.verbose&&(i+=" , schema: ",i+=m?"validate.schema"+c:""+s,i+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),i+=" } "):i+=" {} ";var d=i;return i=h.pop(),!e.compositeRule&&p?e.async?i+=" throw new ValidationError(["+d+"]); ":i+=" validate.errors = ["+d+"]; return false; ":i+=" var err = "+d+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+="} ",p&&(i+=" else { "),i}},function(e,t,a){"use strict";e.exports=function(e,t,a){var r=" ",i=e.level,o=e.dataLevel,n=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,p="data"+(o||""),l="errs__"+i,m=e.util.copy(e);m.level++;var h="valid"+m.level;if(e.util.schemaHasRules(n,e.RULES.all)){m.schema=n,m.schemaPath=s,m.errSchemaPath=c,r+=" var "+l+" = errors; ";var d,f=e.compositeRule;e.compositeRule=m.compositeRule=!0,m.createErrors=!1,m.opts.allErrors&&(d=m.opts.allErrors,m.opts.allErrors=!1),r+=" "+e.validate(m)+" ",m.createErrors=!0,d&&(m.opts.allErrors=d),e.compositeRule=m.compositeRule=f,r+=" if ("+h+") { ";var g=g||[];g.push(r),r="",!1!==e.createErrors?(r+=" { keyword: 'not' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: {} ",!1!==e.opts.messages&&(r+=" , message: 'should NOT be valid' "),e.opts.verbose&&(r+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+p+" "),r+=" } "):r+=" {} ";var v=r;r=g.pop(),!e.compositeRule&&u?e.async?r+=" throw new ValidationError(["+v+"]); ":r+=" validate.errors = ["+v+"]; return false; ":r+=" var err = "+v+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",r+=" } else { errors = "+l+"; if (vErrors !== null) { if ("+l+") vErrors.length = "+l+"; else vErrors = null; } ",e.opts.allErrors&&(r+=" } ")}else r+=" var err = ",!1!==e.createErrors?(r+=" { keyword: 'not' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: {} ",!1!==e.opts.messages&&(r+=" , message: 'should NOT be valid' "),e.opts.verbose&&(r+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+p+" "),r+=" } "):r+=" {} ",r+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",u&&(r+=" if (false) { ");return r}},function(e,t,a){"use strict";e.exports=function(e,t,a){var r=" ",i=e.level,o=e.dataLevel,n=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,p="data"+(o||""),l="valid"+i,m="errs__"+i,h=e.util.copy(e),d="";h.level++;var f="valid"+h.level,g=h.baseId,v="prevValid"+i,y="passingSchemas"+i;r+="var "+m+" = errors , "+v+" = false , "+l+" = false , "+y+" = null; ";var b=e.compositeRule;e.compositeRule=h.compositeRule=!0;var k=n;if(k)for(var x,w=-1,j=k.length-1;w8)r+=" || validate.schema"+s+".hasOwnProperty("+f+") ";else{var q=k;if(q)for(var T=-1,B=q.length-1;T=e.opts.loopRequired,w=e.opts.ownProperties;if(u)if(r+=" var missing"+i+"; ",x){m||(r+=" var "+h+" = validate.schema"+s+"; ");var j="' + "+(z="schema"+i+"["+(E="i"+i)+"]")+" + '";e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPathExpr(k,z,e.opts.jsonPointers)),r+=" var "+l+" = true; ",m&&(r+=" if (schema"+i+" === undefined) "+l+" = true; else if (!Array.isArray(schema"+i+")) "+l+" = false; else {"),r+=" for (var "+E+" = 0; "+E+" < "+h+".length; "+E+"++) { "+l+" = "+p+"["+h+"["+E+"]] !== undefined ",w&&(r+=" && Object.prototype.hasOwnProperty.call("+p+", "+h+"["+E+"]) "),r+="; if (!"+l+") break; } ",m&&(r+=" } "),r+=" if (!"+l+") { ",(P=P||[]).push(r),r="",!1!==e.createErrors?(r+=" { keyword: 'required' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { missingProperty: '"+j+"' } ",!1!==e.opts.messages&&(r+=" , message: '",e.opts._errorDataPathProperty?r+="is a required property":r+="should have required property \\'"+j+"\\'",r+="' "),e.opts.verbose&&(r+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+p+" "),r+=" } "):r+=" {} ";var _=r;r=P.pop(),!e.compositeRule&&u?e.async?r+=" throw new ValidationError(["+_+"]); ":r+=" validate.errors = ["+_+"]; return false; ":r+=" var err = "+_+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",r+=" } else { "}else{r+=" if ( ";var S=d;if(S)for(var E=-1,F=S.length-1;E 1) { ";var d=e.schema.items&&e.schema.items.type,f=Array.isArray(d);if(!d||"object"==d||"array"==d||f&&(d.indexOf("object")>=0||d.indexOf("array")>=0))i+=" outer: for (;i--;) { for (j = i; j--;) { if (equal("+l+"[i], "+l+"[j])) { "+m+" = false; break outer; } } } ";else{i+=" var itemIndices = {}, item; for (;i--;) { var item = "+l+"[i]; ";var g="checkDataType"+(f?"s":"");i+=" if ("+e.util[g](d,"item",!0)+") continue; ",f&&(i+=" if (typeof item == 'string') item = '\"' + item; "),i+=" if (typeof itemIndices[item] == 'number') { "+m+" = false; j = itemIndices[item]; break; } itemIndices[item] = i; } "}i+=" } ",h&&(i+=" } "),i+=" if (!"+m+") { ";var v=v||[];v.push(i),i="",!1!==e.createErrors?(i+=" { keyword: 'uniqueItems' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: { i: i, j: j } ",!1!==e.opts.messages&&(i+=" , message: 'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)' "),e.opts.verbose&&(i+=" , schema: ",i+=h?"validate.schema"+c:""+s,i+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),i+=" } "):i+=" {} ";var y=i;i=v.pop(),!e.compositeRule&&p?e.async?i+=" throw new ValidationError(["+y+"]); ":i+=" validate.errors = ["+y+"]; return false; ":i+=" var err = "+y+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+=" } ",p&&(i+=" else { ")}else p&&(i+=" if (true) { ");return i}},function(e,t,a){"use strict";var r=["multipleOf","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","additionalItems","maxItems","minItems","uniqueItems","maxProperties","minProperties","required","additionalProperties","enum","format","const"];e.exports=function(e,t){for(var a=0;at?1:e=300&&e.statusCode<400&&e.caseless.has("location")){var r=e.caseless.get("location");if(t.debug("redirect",r),this.followAllRedirects)a=r;else if(this.followRedirects)switch(t.method){case"PATCH":case"PUT":case"POST":case"DELETE":break;default:a=r}}else if(401===e.statusCode){var i=t._auth.onResponse(e);i&&(t.setHeader("authorization",i),a=t.uri)}return a},o.prototype.onResponse=function(e){var t=this.request,a=this.redirectTo(e);if(!a||!this.allowRedirect.call(t,e))return!1;if(t.debug("redirect to",a),e.resume&&e.resume(),this.redirectsFollowed>=this.maxRedirects)return t.emit("error",new Error("Exceeded maxRedirects. Probably stuck in a redirect loop "+t.uri.href)),!1;this.redirectsFollowed+=1,i.test(a)||(a=r.resolve(t.uri.href,a));var o=t.uri;return t.uri=r.parse(a),t.uri.protocol!==o.protocol&&delete t.agent,this.redirects.push({statusCode:e.statusCode,redirectUri:a}),this.followAllRedirects&&"HEAD"!==t.method&&401!==e.statusCode&&307!==e.statusCode&&(t.method=this.followOriginalHttpMethod?t.method:"GET"),delete t.src,delete t.req,delete t._started,401!==e.statusCode&&307!==e.statusCode&&(delete t.body,delete t._form,t.headers&&(t.removeHeader("host"),t.removeHeader("content-type"),t.removeHeader("content-length"),t.uri.hostname!==t.originalHost.split(":")[0]&&t.removeHeader("authorization"))),this.removeRefererHeader||t.setHeader("referer",o.href),t.emit("redirect"),t.init(),!0},t.Redirect=o},function(e,t,a){"use strict";var r=a(13),i=a(245),o=["accept","accept-charset","accept-encoding","accept-language","accept-ranges","cache-control","content-encoding","content-language","content-location","content-md5","content-range","content-type","connection","date","expect","max-forwards","pragma","referer","te","user-agent","via"],n=["proxy-authorization"];function s(e){this.request=e,this.proxyHeaderWhiteList=o,this.proxyHeaderExclusiveList=[],void 0!==e.tunnel&&(this.tunnelOverride=e.tunnel)}s.prototype.isEnabled=function(){var e=this.request;return void 0!==this.tunnelOverride?this.tunnelOverride:"https:"===e.uri.protocol},s.prototype.setup=function(e){var t=this.request;if(e=e||{},"string"==typeof t.proxy&&(t.proxy=r.parse(t.proxy)),!t.proxy||!t.tunnel)return!1;e.proxyHeaderWhiteList&&(this.proxyHeaderWhiteList=e.proxyHeaderWhiteList),e.proxyHeaderExclusiveList&&(this.proxyHeaderExclusiveList=e.proxyHeaderExclusiveList);var a,o,s,c,u=this.proxyHeaderExclusiveList.concat(n),p=this.proxyHeaderWhiteList.concat(u),l=function(e,t){var a=t.reduce(function(e,t){return e[t.toLowerCase()]=!0,e},{});return Object.keys(e).filter(function(e){return a[e.toLowerCase()]}).reduce(function(t,a){return t[a]=e[a],t},{})}(t.headers,p);l.host=(a=t.uri,o=a.port,s=a.protocol,c=a.hostname+":",c+=o||("https:"===s?"443":"80")),u.forEach(t.removeHeader,t);var m=function(e){var t=function(e,t){return["https:"===e.protocol?"https":"http","https:"===t.protocol?"Https":"Http"].join("Over")}(e.uri,e.proxy);return i[t]}(t),h=function(e,t){var a=e.proxy;return{proxy:{host:a.hostname,port:+a.port,proxyAuth:a.auth,headers:t},headers:e.headers,ca:e.ca,cert:e.cert,key:e.key,passphrase:e.passphrase,pfx:e.pfx,ciphers:e.ciphers,rejectUnauthorized:e.rejectUnauthorized,secureOptions:e.secureOptions,secureProtocol:e.secureProtocol}}(t,l);return t.agent=m(h),!0},s.defaultProxyHeaderWhiteList=o,s.defaultProxyHeaderExclusiveList=n,t.Tunnel=s},function(e,t,a){"use strict";a(35);var r,i=a(72),o=a(20),n=a(29),s=a(246),c=a(21),u=a(4),p=a(19).Buffer;function l(e){var t=this;t.options=e||{},t.proxyOptions=t.options.proxy||{},t.maxSockets=t.options.maxSockets||o.Agent.defaultMaxSockets,t.requests=[],t.sockets=[],t.on("free",function(e,a,r){for(var i=0,o=t.requests.length;i=this.maxSockets?this.requests.push({host:t.host,port:t.port,request:e}):this.createConnection({host:t.host,port:t.port,request:e})},l.prototype.createConnection=function(e){var t=this;t.createSocket(e,function(a){function r(){t.emit("free",a,e.host,e.port)}function i(e){t.removeSocket(a),a.removeListener("free",r),a.removeListener("close",i),a.removeListener("agentRemove",i)}a.on("free",r),a.on("close",i),a.on("agentRemove",i),e.request.onSocket(a)})},l.prototype.createSocket=function(e,t){var a=this,i={};a.sockets.push(i);var o=h({},a.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:!1});o.proxyAuth&&(o.headers=o.headers||{},o.headers["Proxy-Authorization"]="Basic "+p.from(o.proxyAuth).toString("base64")),r("making CONNECT request");var n=a.request(o);function s(o,s,u){if(n.removeAllListeners(),s.removeAllListeners(),200===o.statusCode)c.equal(u.length,0),r("tunneling connection has established"),a.sockets[a.sockets.indexOf(i)]=s,t(s);else{r("tunneling socket could not be established, statusCode=%d",o.statusCode);var p=new Error("tunneling socket could not be established, statusCode="+o.statusCode);p.code="ECONNRESET",e.request.emit("error",p),a.removeSocket(i)}}n.useChunkedEncodingByDefault=!1,n.once("response",function(e){e.upgrade=!0}),n.once("upgrade",function(e,t,a){process.nextTick(function(){s(e,t,a)})}),n.once("connect",s),n.once("error",function(t){n.removeAllListeners(),r("tunneling socket could not be established, cause=%s\n",t.message,t.stack);var o=new Error("tunneling socket could not be established, cause="+t.message);o.code="ECONNRESET",e.request.emit("error",o),a.removeSocket(i)}),n.end()},l.prototype.removeSocket=function(e){var t=this.sockets.indexOf(e);if(-1!==t){this.sockets.splice(t,1);var a=this.requests.shift();a&&this.createConnection(a)}},r=process.env.NODE_DEBUG&&/\btunnel\b/.test(process.env.NODE_DEBUG)?function(){var e=Array.prototype.slice.call(arguments);"string"==typeof e[0]?e[0]="TUNNEL: "+e[0]:e.unshift("TUNNEL:"),console.error.apply(console,e)}:function(){},t.debug=r},function(e,t){e.exports=require("events")},function(e,t){(function(){var t,a,r,i,o,n;"undefined"!=typeof performance&&null!==performance&&performance.now?e.exports=function(){return performance.now()}:"undefined"!=typeof process&&null!==process&&process.hrtime?(e.exports=function(){return(t()-o)/1e6},a=process.hrtime,i=(t=function(){var e;return 1e9*(e=a())[0]+e[1]})(),n=1e9*process.uptime(),o=i-n):Date.now?(e.exports=function(){return Date.now()-r},r=Date.now()):(e.exports=function(){return(new Date).getTime()-r},r=(new Date).getTime())}).call(this)},function(e,t){e.exports=require("os")},function(e,t,a){var r,i,o;o=function(){return function(){return function(e){var t=[];if(e[0].match(/^[^\/:]+:\/*$/)&&e.length>1){var a=e.shift();e[0]=a+e[0]}e[0].match(/^file:\/\/\//)?e[0]=e[0].replace(/^([^\/:]+):\/*/,"$1:///"):e[0]=e[0].replace(/^([^\/:]+):\/*/,"$1://");for(var r=0;r0&&(i=i.replace(/^[\/]+/,"")),i=r0?"?":"")+n.join("&")}("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}},e.exports?e.exports=o():void 0===(i="function"==typeof(r=o)?r.call(t,a,t,e):r)||(e.exports=i)},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,i=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var a=[],r=!0,i=!1,o=void 0;try{for(var n,s=e[Symbol.iterator]();!(r=(n=s.next()).done)&&(a.push(n.value),!t||a.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&s.return&&s.return()}finally{if(i)throw o}}return a}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n=a(251),s=(r=n)&&r.__esModule?r:{default:r};function c(e,t){return 0===t?e+"\n":e+"\n"+(0,s.default)("",2*t)}t.default=function(e){var t="---";e.frontmatter.forEach(function(e){return Object.entries(e).forEach(function(e){var a=i(e,2),r=a[0],n=a[1];t=function e(t,a,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;try{if("object"===(void 0===a?"undefined":o(a))){if(a instanceof Array){var s=""+a.map(function(e){return'"'+e+'"'});return""+c(r,n)+t+": ["+s+"]"}return a instanceof Error?r:Object.entries(a).reduce(function(t,a){var r=i(a,2);return""+e(r[0],r[1],t,n+1)},""+c(r,n)+t+":")}return""+c(r,n)+t+': "'+a+'"'}catch(e){return""+c(r,n)+t+": "+JSON.stringify(a)}}(r,n,t)})}),t+="\n---";try{t=t+"\n"+e.body}catch(a){t=t+"\n"+JSON.stringify(e.body)}return t}},function(e,t,a){"use strict";e.exports=function(e,t,a){if((t-=(e+="").length)<=0)return e;a||0===a||(a=" ");if(" "==(a+="")&&t<10)return r[t]+e;var i="";for(;1&t&&(i+=a),t>>=1;)a+=a;return i+e};var r=[""," "," "," "," "," "," "," "," "," "]}])); ================================================ FILE: gatsby-browser.js ================================================ /** * Implement Gatsby's Browser APIs in this file. * * See: https://www.gatsbyjs.org/docs/browser-apis/ */ // You can delete this file if you're not using it ================================================ FILE: gatsby-config.js ================================================ module.exports = { siteMetadata: { title: 'Github Actions', }, plugins: [ 'gatsby-plugin-react-helmet', { resolve: `gatsby-source-filesystem`, options: { name: `images`, path: `${__dirname}/src/images`, }, }, 'gatsby-transformer-sharp', 'gatsby-plugin-sharp', { resolve: `gatsby-plugin-manifest`, options: { name: 'gatsby-starter-default', short_name: 'starter', start_url: '/', background_color: '#663399', theme_color: '#663399', display: 'minimal-ui', icon: 'src/images/github.png', }, }, { resolve: `gatsby-plugin-google-analytics`, options: { trackingId: 'UA-133219838-1', }, }, { resolve: `gatsby-source-filesystem`, options: { path: `${__dirname}/src/actions`, name: 'actions', }, }, { resolve: 'gatsby-transformer-remark', options: { plugins: [], // just in case those previously mentioned remark plugins sound cool :) }, }, // this (optional) plugin enables Progressive Web App + Offline functionality // To learn more, visit: https://gatsby.app/offline // 'gatsby-plugin-offline', ], } ================================================ FILE: gatsby-node.js ================================================ const path = require('path') exports.createPages = ({ actions, graphql }) => { const { createPage } = actions const blogPostTemplate = path.resolve(`src/templates/blog-post.js`) return graphql(` { allMarkdownRemark( sort: { order: ASC, fields: [frontmatter___title] } limit: 1000 ) { edges { node { frontmatter { path } } } } } `).then(result => { if (result.errors) { return Promise.reject(result.errors) } result.data.allMarkdownRemark.edges.forEach(({ node }) => { createPage({ path: node.frontmatter.path, component: blogPostTemplate, context: {}, // additional data can be passed via context }) }) }) } ================================================ FILE: gatsby-ssr.js ================================================ /** * Implement Gatsby's SSR (Server Side Rendering) APIs in this file. * * See: https://www.gatsbyjs.org/docs/ssr-apis/ */ // You can delete this file if you're not using it ================================================ FILE: netlify.toml ================================================ [build] functions = "functions" ================================================ FILE: package.json ================================================ { "name": "github-action", "description": "List of Github Actions", "version": "1.0.0", "author": "David Boyne", "dependencies": { "fuse.js": "^3.3.0", "gatsby": "^2.13.40", "gatsby-image": "^2.0.20", "gatsby-plugin-google-analytics": "^2.0.8", "gatsby-plugin-manifest": "^2.0.9", "gatsby-plugin-offline": "^2.0.16", "gatsby-plugin-react-helmet": "^3.0.2", "gatsby-plugin-sharp": "^2.0.14", "gatsby-source-filesystem": "^2.0.11", "gatsby-transformer-remark": "^2.1.15", "gatsby-transformer-sharp": "^2.1.8", "json-to-frontmatter-markdown": "^1.0.0", "react": "^16.6.3", "react-dom": "^16.6.3", "react-helmet": "^5.2.0", "request": "^2.88.0", "request-promise": "^4.2.2", "tomlify": "^0.2.2", "url-join": "^4.0.0" }, "keywords": [ "gatsby" ], "license": "MIT", "scripts": { "build": "npm run build:functions && gatsby build", "build:functions": "netlify-lambda build src/functions", "develop": "gatsby develop", "start": "npm run develop", "format": "prettier --write \"src/**/*.js\"", "test": "echo \"Error: no test specified\" && exit 1" }, "devDependencies": { "all-contributors-cli": "^5.11.0", "netlify-lambda": "^1.3.0", "prettier": "^1.15.2" }, "repository": { "type": "git", "url": "https://github.com/gatsbyjs/gatsby-starter-default" } } ================================================ FILE: src/actions/PHP-Lint.md ================================================ --- path: "/PHP-Lint" title: "PHP Lint" github_url: "https://github.com/michaelw90/PHP-Lint" author: "michaelw90" subtitle: "Github Action for PHPLint" tags: ["github-actions","php","php-linter","linting"] --- # GitHub Action for PHPLint GitHub Action implementation of the PHPLint Package provided by [https://github.com/overtrue/phplint](@Overtrue/phplint). ## Usage You can use it as a Github Action like this: _.github/main.workflow_ ``` workflow "PHP Linting" { resolves = ["Execute"] on = "pull_request" } action "Execute" { uses = "michaelw90/php-lint@master" } ``` If provided, a `.phplint.yml` file in the root will be used for configuration during run of the Action. ## See it in practice You can find a working and not working PR here: https://github.com/michaelw90/PHP-Lint-Demo/pulls ================================================ FILE: src/actions/a-branch-cleanup.md ================================================ --- path: '/a-branch-cleanup' title: 'A Branch Cleanup' github_url: 'https://github.com/jessfraz/branch-cleanup-action' author: 'jessfraz' tags: ['branch', 'pull-request', 'github'] subtitle: 'A GitHub action to automatically delete the branch after a pull request has been merged.' --- [![Travis CI](https://img.shields.io/travis/jessfraz/branch-cleanup-action.svg?style=for-the-badge)](https://travis-ci.org/jessfraz/branch-cleanup-action) > **NOTE:** This will **never** delete the repository's default branch. If the pull request is closed _without_ merging, it will **not** delete it. **Table of Contents** - [Usage](#usage) - [Contributing](#contributing) - [Running the tests](#running-the-tests) ## Usage ``` workflow "on pull request merge, delete the branch" { on = "pull_request" resolves = ["branch cleanup"] } action "branch cleanup" { uses = "jessfraz/branch-cleanup-action@master" secrets = ["GITHUB_TOKEN"] } ``` ![demo](https://github.com/jessfraz/branch-cleanup-action/raw/master/demo.png) ================================================ FILE: src/actions/aloba.md ================================================ --- path: "/aloba" title: "aloba" github_url: "https://github.com/containous/aloba" author: "containous" subtitle: "Myrmica Aloba 🐜: Add labels and milestone on pull requests and issues." tags: ["labels","milestone","github","pull-requests","issues","assign"] --- # Myrmica Aloba 🐜: Add labels and milestone on pull requests and issues. [![Release](https://img.shields.io/github/release/containous/aloba.svg?style=flat)](https://github.com/containous/aloba/releases) [![Build Status](https://travis-ci.org/containous/aloba.svg?branch=master)](https://travis-ci.org/containous/aloba) [![Docker Build Status](https://img.shields.io/docker/build/containous/aloba.svg)](https://hub.docker.com/r/containous/aloba/builds/) - on new issue: adds the label `status/0-needs-triage` - on new pull request: - adds the label `status/0-needs-triage` - adds labels based on [rules](#rules). - adds a milestone (if a milestone matches the based branch of the PR). - adds a label related to the size of the pull request. ## Usage - `GITHUB_TOKEN`: Github Token. - `.github/aloba-rules.toml`: the rules to apply. ``` Myrmica Aloba - GitHub Action. Usage: action [--flag[=true|false| ]] [-f[true|false| ]] ... set true/false to boolean flag(s) Flags: --debug Debug mode. (default "false") --dry-run Dry run mode. (default "true") -h, --help Print Help (this message) and exit ``` ## Examples ```hcl workflow "Aloba: Issues" { on = "issues" resolves = ["issue-labels"] } action "issue-labels" { uses = "docker://containous/aloba" secrets = ["GITHUB_TOKEN"] args = "action --dry-run=false" } workflow "Aloba: Pull Requests" { on = "pull_request" resolves = ["pull-request-labels"] } action "pull-request-labels" { uses = "docker://containous/aloba" secrets = ["GITHUB_TOKEN"] args = "action --dry-run=false" } ``` ## Rules ```toml [[Rules]] Label = "area/vegetable" Regex = "(?i).*(tomate|carotte).*" [[Rules]] Label = "area/cheese" Regex = "cheese/.*" [[Rules]] Label = "area/infrastructure" Regex = "(?i)(\\.github|script/).*" [Limits] [Limits.Small] SumLimit = 150 DiffLimit = 70 FilesLimit = 20 [Limits.Medium] SumLimit = 400 DiffLimit = 200 FilesLimit = 50 ``` ================================================ FILE: src/actions/android.md ================================================ --- path: '/android' title: 'Android' github_url: 'https://github.com/vgaidarji/android-github-actions' author: 'vgaidarji' tags: ['android'] subtitle: 'A collection of GitHub actions to perform Android related tasks.' --- ## Usage Usage information for individual commands can be found in their respective directories. ================================================ FILE: src/actions/apprise-ga.md ================================================ --- path: "/apprise-ga" title: "apprise-ga" github_url: "https://github.com/cstuder/apprise-ga" author: "cstuder" subtitle: "GitHub Action to send a push notification via a series of different services thanks to the the Apprise library" tags: ["github-actions","notifications","email","push-notifications","events","apprise","jinja2"] --- # apprise-ga GitHub Action to send a push notification via a series of different services thanks to the the [Apprise library](https://github.com/caronc/apprise) Supports services like Slack, AWS SNS, Discord, IFTTT, Matrix, Microsoft Teams, Telegram, Twitter etc., as well as email and webhooks. Supports dynamically adding event data to the notification message. ## Action block syntax ```hcl action "Send push notification" { uses = "cstuder/apprise-ga@master" secrets = ["APPRISE_URL"] args = ["Notification title", "Notification message"] } ``` ## Usage 1. Create a new action in your workflow which uses `cstuder/apprise-ga@master`. 1. Look up the syntax for your push notification URL in the list of [Supported Notifications](https://github.com/caronc/apprise#supported-notifications) by Apprise. (I.e. `protocol://user:password@hostname/channel`) 1. Add this URL as the secret `APPRISE_URL` to the action. 1. Add your message to `args` in the format ["TITLE", "MESSAGE"]. (This might not work in the current version of the visual workflow editor.) ### Inserting event data with templates For both title and message you can use the [Jinja2](http://jinja.pocoo.org) syntax to insert data from the event trigger (`/github/workflow/event.json`) into your notification. Find the event data in the list of [GitHub webhook payloads](https://developer.github.com/v3/activity/events/types/). #### Templating example For a push event, you might use the following arguments: `args = ["Push received on {{ ref }}", "Commit by {{ head_commit.author.name }}: {{ head_commit.message | truncate(128) }} ({{ head_commit.id[0:7] }})"]` ## Action configuration ### Environment variables None. ### Secrets Key|Value ---|--- `APPRISE_URL`|Notification URL according to [Apprise](https://github.com/caronc/apprise#supported-notifications) ### Required arguments Position|Value ---|--- 1|Notification title 2|Notification message ### Optional arguments None. ## License MIT. ================================================ FILE: src/actions/assignee-to-reviewer.md ================================================ --- path: '/assignee-to-reviewer' title: 'Set pull request reviewers based on assignees' github_url: 'https://github.com/pullreminders/assignee-to-reviewer-action' author: 'pullreminders' tags: ['github', 'pull-request'] subtitle: 'If your team currently uses pull request Assignees but would like to switch to Review Requests, having everyone change their workflows can be difficult. This GitHub Action eases the transition by automatically creating and removing review requests based on Assignees.' --- ## Usage This Action subscribes to [Pull request events](https://developer.github.com/v3/activity/events/types/#pullrequestevent) which fire whenever users are assigned or unassigned to pull requests. ```workflow workflow "Assign reviewers based on assignees" { on = "pull_request" resolves = ["Assignee to reviewer"] } action "Assignee to reviewer" { uses = "pullreminders/assignee-to-reviewer-action@master" secrets = [ "GITHUB_TOKEN" ] } ``` ## Demo ================================================ FILE: src/actions/automerge.md ================================================ --- path: '/automerge' title: 'Automerge' github_url: 'https://github.com/pascalgn/automerge-action' author: 'Pascal' twitter: '@pascalgn' tags: ['merge', 'rebase'] subtitle: 'GitHub action to automatically merge pull requests that are ready.' --- GitHub action to automatically merge pull requests that are ready. This action will behave differently based on the labels assigned to a pull request: - `automerge` means that changes from the base branch will automatically be merged into the pull request, but only when "Require branches to be up to date before merging" is enabled in the branch protection rules. When the PR is ready, it will automatically be merged. - `autorebase` means that when changes happen in the base branch, the pull request will be rebased onto the base branch. When the PR is ready, it will automatically be merged (with a merge commit) into the base branch. - pull requests without one of these labels will be ignored A pull request is considered ready when: 1. the required number of review approvals has been given (if enabled in the branch protection rules) and 2. the required checks have passed (if enabled in the branch protection rules) and 3. the pull request is up to date (if enabled in the branch protection rules) After the pull request has been merged successfully, the branch will be deleted (unless there exist branch protection rules preventing this branch from being deleted). ## Usage Add this to your `.github/main.workflow` file: ``` workflow "automerge pull requests on updates" { on = "pull_request" resolves = ["automerge"] } workflow "automerge pull requests on reviews" { on = "pull_request_review" resolves = ["automerge"] } workflow "automerge pull requests on status updates" { on = "status" resolves = ["automerge"] } workflow "rebase other pull requests after merges" { on = "push" resolves = ["automerge"] } action "automerge" { uses = "pascalgn/automerge-action@9d655352861c757731df72b6ac21d65fdf6d92ee" secrets = ["GITHUB_TOKEN"] } ``` ================================================ FILE: src/actions/aws-sam.md ================================================ --- path: '/aws-sam' title: 'AWS SAM' github_url: 'https://github.com/apex/actions/' author: 'apex' tags: ['aws', 'sam', 'serverless'] subtitle: 'Deploy serverless infrastructure with AWS SAM' --- ## Actions [GitHub Actions](https://github.com/features/actions) for automating builds, deployments, and so on. - [Up](./up) — Deploy serverless applications and APIs to [AWS Lambda](https://aws.amazon.com/lambda/) - [Go](./go) — Build Go applications - [Slack](./slack) — Send Slack messages - [AWS SAM](./aws/sam) — Deploy serverless infrastructure with [AWS SAM](https://aws.amazon.com/serverless/sam/) ## Resources - [Docker Images](https://github.com/lambci/docker-lambda) for Lambda --- ================================================ FILE: src/actions/aws.md ================================================ --- path: '/aws' title: 'aws' github_url: 'https://github.com/actions/aws' author: 'github' tags: ['aws', 'amazon'] subtitle: 'This repository contains GitHub Actions for Amazon Web Services, for performing common tasks such as using EKS, as well as a generic cli for doing arbitrary actions with the AWS commandline client.' --- ## Usage Usage information for individual commands can be found in their respective directories. ================================================ FILE: src/actions/azure.md ================================================ --- path: '/azure' title: 'Azure' github_url: 'https://github.com/Azure/github-actions' author: 'Azure' tags: ['azure', 'microsoft'] subtitle: 'This Action for Azure enables arbitrary actions for interacting with Azure services via the az command-line client.' --- _Not much details on the README.md_ More information found here [https://github.com/Azure/github-actions](https://github.com/Azure/github-actions) ================================================ FILE: src/actions/azure_node.md ================================================ --- path: '/azure-node' title: 'Azure-Node' github_url: 'https://github.com/sdras/example-azure-node' author: 'Sarah Drasner' tags: ['azure', 'microsoft'] twitter: '@sarah_edo' subtitle: 'An example Node webapp deployed to Azure with GitHub actions. More info in this article: css-tricks.com/introducing-github-actions.' --- ================================================ FILE: src/actions/cake-tasks.md ================================================ --- path: '/cake-tasks' title: 'Cake Tasks' github_url: 'https://github.com/gep13/cake-actions' author: 'gep13' tags: [] subtitle: 'These Cake GitHub Actions allow you to run Cake tasks as part of your GitHub workflow..' --- ## Actions ### Task Action Runs a Cake Task, defined in a build.cake in the root of the repository. See the task [README](https://github.com/gep13/cake-actions/blob/master/task/README.md) for more details. ================================================ FILE: src/actions/clojure-formatter.md ================================================ --- path: '/clojure-formatter' title: 'Clojure Formatter' github_url: 'https://github.com/bltavares/actions' author: 'bltavares' tags: ['clojure', 'formatter', 'autofixer'] subtitle: 'This actions will check the formating of the project, using cljfmt.' --- ## Validations on Push This actions will check the formating of the project, using [cljfmt](https://github.com/weavejester/cljfmt). `cljfmt` plugin required to be installed on your project, as well as any variable needed to access all the dependencies of the project. Given that this plugin uses `lein cljfmt`, it might need extra environment variable and secrets, such as `AWS_ACCESS_KEY_ID` and `AWS_ACCESS_KEY_KEY`. ## Fixes on Pull Request review This action provides automated fixes using Pull Request review comments. If the comment starts with `fix $action_name` or `fix cljfmt`, a new commit will be added to the branch with the automated fixes applied. **Supports**: autofix on push ## Example workflow ```hcl workflow "on push" { on = "push" resolves = ["cljfmt"] } # Used for fix on review workflow "on review" { resolves = ["cljfmt"] on = "pull_request_review" } action "cljfmt" { uses = "bltavares/actions/cljfmt@master" # Enable autofix on push # args = ["autofix"] # Used for pushing changes for `fix` comments on review secrets = ["GITHUB_TOKEN"] } ``` ================================================ FILE: src/actions/cloudflare-worker.md ================================================ --- path: '/cloudflare-workder' title: 'Cloudflare worker' github_url: 'https://github.com/cpilsworth/cloudflare-worker-action' author: 'cpilsworth' tags: ['Cloudflare', 'Worker'] subtitle: 'A GitHub action to deploy a Cloudflare Worker on push to the master branch.' --- [![Build Status](https://travis-ci.org/cpilsworth/cloudflare-worker-action.svg?branch=master)](https://travis-ci.org/cpilsworth/cloudflare-worker-action) ```hcl workflow "on push to master, deploy worker to Cloudflare" { on = "push" resolves = ["worker deploy"] } action "worker deploy" { uses = "cpilsworth/cloudflare-worker-action@master" env = { CLOUDFLARE_EMAIL = "you@example.com", CLOUDFLARE_ZONE = "diffa.co.uk", WORKER_JS = "bin/worker.js", } secrets = [ "CLOUDFLARE_TOKEN" ] } ``` _Heavily_ inspired by [Jessie Frazelle's](https://twitter.com/jessfraz) [aws-fargate-action](https://github.com/jessfraz/aws-fargate-action) GitHub action project. :trophy: ### Tests The tests use [shellcheck](https://github.com/koalaman/shellcheck). You don't need to install anything. They run in a container. ```console $ make test ``` ### Using the `Makefile` ```console $ make help cf-apply Run terraform apply for Amazon. cf-destroy Run terraform destroy for Amazon. cf-plan Run terraform plan for Amazon. shellcheck Runs the shellcheck tests on the scripts. test Runs the tests on the repository. update-terraform Update terraform binary locally from the docker container. update Update terraform binary locally. ``` ================================================ FILE: src/actions/composer.md ================================================ --- path: '/composer' title: 'Composer' github_url: 'https://github.com/pxgamer/composer-action' author: 'Owen Voke' twitter: '@pxgamer112' tags: ['php', 'composer'] subtitle: 'GitHub Action for interacting with Composer.' --- # Action details This Action for [Composer](https://getcomposer.org) enables arbitrary actions with the Composer command-line client. ## Usage Via GitHub Workflow ```hcl action "Composer Install" { uses = "pxgamer/composer-action" args = "install" } ``` ================================================ FILE: src/actions/cowsays.md ================================================ --- path: '/cowsays' title: 'Cowsays Action' github_url: 'https://github.com/mscoutermarsh/cowsays-action' author: 'Mike Coutermarsh' twitter: '@mscccc' subtitle: 'Say things with a cow' --- # Action details # 🐮 cowsays-action Cowsays for GitHub Actions. This Action wraps the [ruby_cowsay](https://github.com/PatrickTulskie/ruby_cowsay) gem. ``` _____________ < Ship it!!!!!! > ------------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || || ``` ## 🐄 Usage ```hcl workflow "Deploy Master" { on = "push" resolves = ["cow"] } action "cow" { uses = "mscoutermarsh/cowsays-action@master" args = "Ship it!!!!!" } ``` ================================================ FILE: src/actions/dart-formatter.md ================================================ --- path: '/dart-formatter' title: 'Dart & flutter formatter' github_url: 'https://github.com/bltavares/actions' author: 'bltavares' tags: ['dart', 'flutter', 'dartfmt', 'formatter', 'autofixer'] subtitle: 'This actions will check the formating of a Dart (or Flutter) project, using dartfmt.' --- ## Validations on Push This actions will check the formating of a Dart (or Flutter) project, using [dartfmt](https://github.com/dart-lang/dart_style). ## Fixes on Pull Request review This action provides automated fixes using Pull Request review comments. If the comment starts with `fix $action_name` or `fix dartfmt`, a new commit will be added to the branch with the automated fixes applied. **Supports**: autofix on push ## Example workflow ```hcl workflow "on push" { on = "push" resolves = ["dartfmt"] } workflow "on review" { resolves = ["dartfmt"] on = "pull_request_review" } action "dartfmt" { uses = "bltavares/actions/dartfmt@master" # Enable autofix on push # args = ["autofix"] # Used for pushing changes for `fix` comments on review secrets = ["GITHUB_TOKEN"] } ``` ================================================ FILE: src/actions/digitalocean.md ================================================ --- path: "/actions" title: "DigitalOcean" github_url: "https://github.com/digitalocean/actions" author: "digitalocean" subtitle: "GitHub Actions for DigitalOcean" tags: ['cli', 'cloud', 'digitalocean'] --- # GitHub Actions for DigitalOcean This action enables you to interact with [DigitalOcean](https://www.digitalocean.com/) services via [the `doctl` command-line client](https://github.com/digitalocean/doctl). ## Usage As an example, one common use case is retrieving the credentials for a Kubernetes cluster hosted on DigitalOcean for use in a deployment workflow: ```hcl action "Save DigitalOcean kubeconfig" { needs = ["Push image to Docker Hub"] uses = "digitalocean/actions/doctl@master" secrets = ["DIGITALOCEAN_ACCESS_TOKEN"] env = { CLUSTER_NAME = "example" } args = ["kubernetes cluster kubeconfig show $CLUSTER_NAME > $HOME/.kubeconfig"] } ``` See [this reposirory](https://github.com/andrewsomething/example-doctl-action) for a full end-to-end example that also demonstrates building the Docker image, pushing it to Docker Hub, and using `kubectl` to deploy to the Kubernetes cluster on DigitalOcean. ### Secrets - `DIGITALOCEAN_ACCESS_TOKEN` – **Required** A DigitalOcean personal access token ([more info](https://www.digitalocean.com/docs/api/create-personal-access-token/)). ### Environment variables We provide defaults for the following, these may also be overridden: - `DIGITALOCEAN_OUTPUT_FORMAT`- **Optional** doctl's output output format, defaults to `json` By default, this action is configured to save output in JSON format to `${HOME}/${GITHUB_ACTION}.${DIGITALOCEAN_OUTPUT_FORMAT}`for consumption by downstream actions. ## License The Dockerfile and associated scripts and documentation in this project are released under the [MIT License](LICENSE). ================================================ FILE: src/actions/discord-notification.md ================================================ --- path: '/discord-notification' title: 'Discord Notification' github_url: 'https://github.com/Ilshidur/action-discord' author: 'Ilshidur' tags: ['discord', 'notification'] subtitle: 'Sends a Discord notification message. Simple as that. Supports all workflow event types by using the Discord GitHub webhooks.' --- Sends a Discord notification message. Simple as that. Supports all [workflow event types](https://developer.github.com/webhooks/#events) by using the [Discord GitHub webhooks](https://discordapp.com/developers/docs/resources/webhook#execute-githubcompatible-webhook). ![GitHub Action](action.png 'GitHub Action') _Appearance on Discord :_ ![Discord message](discord.png 'Discord message') This GitHub action is part of a list of Actions that are located in an other repo. Feel free to check it out : https://github.com/Ilshidur/actions.
## Usage ``` action "Discord notification" { uses = "Ilshidur/actions/discord@master" secrets = ["DISCORD_WEBHOOK"] args = "The project has been deployed." } ``` **NOTICE :** for stability purposes, it is recommended to use the action with an explicit commit SHA-1 : `uses = "Ilshidur/actions/discord@a08c189"` (=> link to the commits list : https://github.com/Ilshidur/actions/commits/master) ### Arguments By default, the GitHub action will send a notificaction with the event informations. Providing the arguments will override the message. #### Examples - `args = "Hello, beautiful ! I ran a GitHub Actions for you <3"` - `args = "I showed you my commit. Please respond."` ### Secrets - **`DISCORD_WEBHOOK`** (**required**): the Discord webhook URL (see https://support.discordapp.com/hc/en-us/articles/228383668-Intro-to-Webhooks) - **_IMPORTANT !!_ You MUST NOT append `/github` at the end of the webhook.** - That's all. ================================================ FILE: src/actions/dnscontrol-action.md ================================================ --- path: '/dnscontrol-action' title: 'dnscontrol-action' github_url: 'https://github.com/koenrh/dnscontrol-action' author: 'koenrh' subtitle: 'Deploy your DNS configuration using GitHub Actions using DNSControl.' tags: ['dns'] --- # DNSControl Action Deploy your DNS configuration using [GitHub Actions](https://github.com/actions) using [DNSControl](https://github.com/StackExchange/dnscontrol/). ## Usage These are the three relevant sub commands to use with this action. ### check Run the action with the 'check' argument in order to check and validate the `dnscontrol.js` file. This action does not communicate with the DNS providers, hence does not require any secrets to be set. ```workflow action "DNSControl check" { uses = "koenrh/dnscontrol-action@master" args = "check" } ``` ### preview Run the action with the 'preview' argument to check what changes need to be made. It prints out what DNS records are expected to be created, modified or deleted. This action requires the secrets for the specified DNS providers. ```workflow action "DNSControl preview" { uses = "koenrh/dnscontrol-action@master" args = "preview" secrets = ["CLOUDFLARE_API_USER", "CLOUDFLARE_API_KEY"] } ``` This is the action you probably want to run for each branch so that proposed changes could be verified before an authorized person merges these changes into `master`. ### push Run the action with the 'push' arugment to publish the changes to the specified DNS providers. Running the action with the 'push' argument will publish the changes with the specified DNS providers. You should probably only use this command combined with the GitHub [Filters action](https://github.com/actions/bin/tree/master/filter#filters-for-github-actions) to make sure that only changes in the `master` branch are deployed to production. ```workflow action "DNSControl push" { uses = "koenrh/dnscontrol-action@master" args = "push" secrets = ["CLOUDFLARE_API_KEY", "CLOUDFLARE_API_USER"] } ``` You should probably only use this command combined with the GitHub [Filters action](https://github.com/actions/bin/tree/master/filter#filters-for-github-actions) to make sure that only changes in the `master` branch are deployed to production. ## Secrets Depending on the DNS providers that are used, this action requires secrets to be set. ### Cloudflare [Documentation](https://stackexchange.github.io/dnscontrol/providers/cloudflare) - `CLOUDFLARE_API_USER` - `CLOUDFLARE_API_KEY` - `CLOUDFLARE_ACCOUNT_ID` (optional) - `CLOUDFLARE_ACCOUNT_NAME` (optional) ### DigitalOcean [Documentation](https://stackexchange.github.io/dnscontrol/providers/digitalocean) - `DIGITALOCEAN_OAUTH_TOKEN` ### DNSimple [Documentation](https://stackexchange.github.io/dnscontrol/providers/dnsimple) - `DNSIMPLE_ACCOUNT_ACCESS_TOKEN` ### Gandi [Documentation](https://stackexchange.github.io/dnscontrol/providers/gandi) - `GANDI_API_KEY` ### Google CLOUD DNS [Documentation](https://stackexchange.github.io/dnscontrol/providers/gcloud) - `GOOGLE_CLOUD_PROJECT_ID` - `GOOGLE_CLOUD_PRIVATE_KEY_ID` - `GOOGLE_CLOUD_PRIVATE_KEY` - `GOOGLE_CLOUD_CLIENT_EMAIL` - `GOOGLE_CLOUD_CLIENT_ID` - `GOOGLE_CLOUD_CLIENT_X509_CERT_URL` ### Linode [Documentation](https://stackexchange.github.io/dnscontrol/providers/linode) - `LINODE_ACCESS_TOKEN` ### Name.com [Documentation](https://stackexchange.github.io/dnscontrol/providers/name.com) - `NAME_COM_API_USER` - `NAME_COM_API_KEY` - `NAME_COM_API_URL` (optional) ### Namecheap [Documentation](https://stackexchange.github.io/dnscontrol/providers/namecheap) - `NAMECHEAP_API_USER` - `NAMECHEAP_API_KEY` - `NAMECHEAP_BASE_URL` (optional) ### NS1 [Documentation](https://stackexchange.github.io/dnscontrol/providers/ns1) - `NSONE_API_KEY` ### OVH [Documentation](https://stackexchange.github.io/dnscontrol/providers/ovh) - `OVH_APP_KEY` - `OVH_APP_SECRET_KEY` - `OVH_CONSUMER_KEY` ### Amazon Route 53 [Documentation](https://stackexchange.github.io/dnscontrol/providers/route53) - `AWS_ACCESS_KEY_ID` - `AWS_SECRET_ACCESS_KEY` - `AWS_SESSION_TOKEN` (optional) ### SoftLayer [Documentation](https://stackexchange.github.io/dnscontrol/providers/softlayer) - `SOFTLAYER_USERNAME` - `SOFTLAYER_API_KEY` ### Vultr [Documentation](https://stackexchange.github.io/dnscontrol/providers/vultr) - `VULTR_TOKEN` ================================================ FILE: src/actions/docker-linter.md ================================================ --- path: '/docker-linter' title: 'DockerFile Linter' github_url: 'https://github.com/jwr0/dockerfile-linter-action' author: 'jwr0' tags: ['docker', 'linter'] subtitle: 'A GitHub action for linting Dockerfiles and commenting on a PR with any errors.' --- ## Usage You should have something like this in your `.github/main.workflow`: ``` workflow "on pull request, Dockerfile lint" { on = "pull_request" resolves = ["Dockerfile lint"] } action "Dockerfile lint" { uses = "jwr0/dockerfile-linter-action" secrets = ["GITHUB_TOKEN"] # Optionally, if your Dockerfile is not in the root of your repository, # you can specify a DOCKERFILE environment variable with the path to # your Dockerfile env = { DOCKERFILE = "./some/other/directory/Dockerfile" } } ``` As part of a pull request, the GitHub Action bot will comment with any mistakes it found in your Dockerfile. Or if no mistakes are found, it won't leave any comment. ![demo](demo.png) ## Underlying project This GitHub Action repository simply packages up other software to make them usable in the context of GitHub Actions. Specifically, the logic used by the Dockerfile linter comes from another project: [replicatedhq/dockerfilelint](https://github.com/replicatedhq/dockerfilelint). They also offer a web-based linter at [fromlatest.io](https://www.fromlatest.io/). ## Issues Any issues using this GitHub Action can be filed using [GitHub Issues](https://github.com/jwr0/dockerfile-linter-action/issues). ================================================ FILE: src/actions/docker.md ================================================ --- path: '/docker' title: 'Docker' github_url: 'https://github.com/actions/docker' author: 'GitHub' tags: ['docker', 'cli'] subtitle: 'This repository contains GitHub Actions for Docker, for performing common tasks such as authorizing and tagging containers, as well as a generic cli for doing arbitrary actions with the Docker commandline client.' --- ## Usage Usage information for individual commands can be found in their respective directories. ================================================ FILE: src/actions/ember-cli.md ================================================ --- path: '/ember-cli' title: 'Ember Cli' github_url: 'https://github.com/NuckChorris/ember-cli-actions' author: 'NuckChorris' tags: ['ember'] subtitle: 'This Action for ember-cli enables arbitrary actions with the ember-cli command-line client, including deploying ember applications with ember-cl-deploy.' --- ## Usage An example workflow to build, test, and publish an ember application follows: ```hcl workflow "Build, Test, and Publish" { on = "push" resolves = ["Deploy"] } action "Build" { uses = "NuckChorris/ember-cli-actions@master" args = "install" } action "Test" { needs = "Build" uses = "NuckChorris/ember-cli-actions@master" args = "test" } action "Publish" { needs = "Test" uses = "NuckChorris/ember-cli-actions@master" args = "deploy --access public" } ``` ================================================ FILE: src/actions/firebase.md ================================================ --- path: '/firebase' title: 'Firebase' github_url: 'https://github.com/w9jds/firebase-action' author: 'w9jds' tags: ['firebase'] subtitle: 'This Action for firebase-tools enables arbitrary actions with the firebase command-line client..' --- ### Secrets - `FIREBASE_TOKEN` - **Required**. The token to use for authentication. This token can be aquired through the `firebase login:ci` command. ### Environment variables - `PROJECT_ID` - **Optional**. To specify a specific project to use for all commands, not required if you specify a project in your `.firebaserc` file. #### Example To authenticate with Firebase, and deploy to Firebase Hosting: ```hcl action "Deploy Production Site" { uses = "w9jds/firebase-action@master" args = "deploy --only hosting:prod" env = { PROJECT_ID = "new-eden-storage-a5c23" } secrets = ["FIREBASE_TOKEN"] } ``` ================================================ FILE: src/actions/gatsby-cli.md ================================================ --- path: '/gatsby-cli' title: 'Gatsby CLI' github_url: 'https://github.com/jzweifel/gatsby-cli-github-action' author: 'Jacob Zweifel' twitter: '@jacob_zweifel' tags: [gatsby, cli] subtitle: 'This Action wraps the Gatsby CLI to enable common Gatsby commands.' --- # Action details ## Usage ```workflow workflow "Build Gatsby Site" { on = "push" resolves = ["build"] } action "build" { uses = "jzweifel/gatsby-cli-github-action" args = "build" } ``` ```workflow workflow "Build Gatsby Site in Subdirectory" { on = "push" resolves = ["build"] } action "build" { uses = "jzweifel/gatsby-cli-github-action" env = { GATSBY_PROJECT_PATH = "./client" } args = "build" } ``` ### Environment variables * `GATSBY_PROJECT_PATH` - **Optional**. Directory from which to execute the Gatsby CLI. ================================================ FILE: src/actions/ghpages.md ================================================ --- path: "/ghpages" title: "ghpages" github_url: "https://github.com/maxheld83/ghpages" author: "maxheld83" subtitle: "Deploy arbitrary static assets to GitHub Actions" tags: ["github-actions","github-pages","deployment","static-site","cicd","continuous-integration","continuous-delivery","docker"] --- # GitHub Action to Deploy Static Assets to GitHub Actions [![Actions Status](https://wdp9fww0r9.execute-api.us-west-2.amazonaws.com/production/badge/maxheld83/ghpages)](https://github.com/maxheld83/ghpages/actions) [![GitHubActions](https://img.shields.io/badge/as%20seen%20on%20-GitHubActions-blue.svg)](https://github-actions.netlify.com/ghpages) This action simply lets you deploy arbitrary folders of static content from your workflow's working directory (`/github/workspace`) to [GitHub pages](https://pages.github.com). This works by having your action instance `git push` your chosen asset folder (`BUILD_DIR`) to the `gh-pages` branch of your GitHub repository for the `gh-pages` branch to be served. Remember that you may also have to adjust your [repository settings](https://help.github.com/articles/configuring-a-publishing-source-for-github-pages/). There are already great GitHub actions to use static site generators *and* then deploy to GitHub Pages (for [jekyll](https://github.com/helaili/jekyll-action), [jekyll](https://github.com/BryanSchuetz/jekyll-deploy-gh-pages), [zola](https://github.com/shalzz/zola-deploy-action) and surely many more to come). This action isn't that, though I've borrowed much of the git action from these works. **This action will not build anything, it just deploys.** ## Secrets Deployment to GitHub pages happens by `git push`ing to the `gh-pages` branch. To authorise this, the GitHub action needs a secret. For now, somewhat confusingly, the `GITHUB_TOKEN` [available for every repo](https://developer.github.com/actions/creating-workflows/storing-secrets/) *does* suffice to push to `gh-pages`, but *does not* suffice to trigger a page build on GitHub, or even propagate the content to the GitHub content-delivery network. You therefore **have to [create a custom Personal Access Token (PAT)](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/)** much like you'd do for external services (say, Travis). You then have to paste this token into the GitHub UI as a secret under the name `GH_PAT` (repository settings/secrets) and call it in the action as in the below. I've asked GitHub to streamline this process. The discussion is documented [here](https://github.com/maxheld83/ghaction-ghpages/issues/1). ## Environment Variables Just `BUILD_DIR`, the build directory relative to your repository root. You can also pass `/.` if you want to push your repository root. ## Arguments None. ## Example Usage ``` action "Deploy to GitHub Pages" { uses = "maxheld83/ghpages@v0.1.1" env = { BUILD_DIR = "public/" } secrets = ["GH_PAT"] } ``` ================================================ FILE: src/actions/git-auto-commit-action.md ================================================ --- path: "/git-auto-commit-action" title: "git-auto-commit-action" github_url: "https://github.com/stefanzweifel/git-auto-commit-action" author: "stefanzweifel" subtitle: "Automatically Commit changed Files back to Github in Github Actions" tags: ["github-action","github-actions","git","github"] --- # git-auto-commit-action This GitHub Action automatically commits files which have been changed during a Workflow run and pushes the Commit back to GitHub. The Committer is "GitHub Actions " and the Author of the Commit is "Your GitHub Username . If no changes are available, the Actions does nothing. This Action has been inspired and adapted from the [auto-commit](https://github.com/cds-snc/github-actions/tree/master/auto-commit )-Action of the Canadian Digital Service and the [commit](https://github.com/elstudio/actions-js-build/blob/41d604d6e73d632e22eac40df8cc69b5added04b/commit/entrypoint.sh)-Action by Eric Johnson. ## Usage Add the following step at the end of your job. ```yaml - uses: stefanzweifel/git-auto-commit-action@v2.3.0 with: commit_message: Apply automatic changes branch: ${{ github.head_ref }} # Optional git params commit_options: '--no-verify --signoff' # Optional glob pattern of files which should be added to the commit file_pattern: src/\*.js env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ``` You **do not** have to create a new secret called `GITHUB_TOKEN` in your repository. `GITHUB_TOKEN` is a special token GitHub creates automatically during an Action run. (See [the documentation](https://help.github.com/en/articles/virtual-environments-for-github-actions#creating-and-using-secrets-encrypted-variables) for details) The Action will only commit files back, if changes are available. The resulting commit **will not trigger** another GitHub Actions Workflow run! It is recommended to use this Action in Workflows which listen to the `pull_request` event. If you want to use the Action on other events, you have to hardcode the value for `branch` as `github.head_ref` is only available in Pull Requests. ## Example Usage This Action will only work, if the job in your workflow changes project files. The most common use case for this, is when you're running a Linter or Code-Style fixer on GitHub Actions. In this example I'm running `php-cs-fixer` in a PHP project. ```yaml name: php-cs-fixer on: pull_request: paths: - '**.php' jobs: php-cs-fixer: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 with: fetch-depth: 1 - name: Run php-cs-fixer uses: docker://oskarstark/php-cs-fixer-ga - name: Commit changed files uses: stefanzweifel/git-auto-commit-action@v2.3.0 with: commit_message: Apply php-cs-fixer changes branch: ${{ github.head_ref }} file_pattern: src/\*.php env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ``` ### Inputs Checkout [`action.yml`](https://github.com/stefanzweifel/git-auto-commit-action/blob/master/action.yml) for a full list of supported inputs. ## Versioning We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/stefanzweifel/git-auto-commit-action/tags). ## License This project is licensed under the MIT License - see the [LICENSE](https://github.com/stefanzweifel/git-auto-commit-action/blob/master/LICENSE) file for details. ================================================ FILE: src/actions/gitcret.md ================================================ --- path: "/gitcret" title: "gitcret" github_url: "https://github.com/CySeq/gitcret" author: "CySeq" subtitle: "Prevents pushing sensitive keys/credentials. Continuously scan your repositories, commits or pull-requests for sensitive credentials and generate alerts." tags: ["security","security-tools","security-automation","devops","github-actions","gitleaks","github-secrets","security-audit"] --- # gitCret Prevents pushing sensitive keys/credentials. Continuously scan your repositories, commits or pull-requests for sensitive credentials and generate alerts. # Setup ## New Workflow - Add following code to the .github/workflows/gitcret.yml ``` name: gitCret on: [pull_request, push] jobs: gitcret: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: gitCret uses: CySeq/gitcret@v2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ``` - Your code will be automatically audited for sensitive credentials on each PR and Commit. ## Existing Workflow - Add following code as a new Job inside your workflow. ``` gitcret: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: gitCret uses: CySeq/gitcret@v2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ``` ## Environment Variables - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ## Credits - [zricethezav/gitleaks](https://github.com/zricethezav/gitleaks) for underlying git credentials detection mechanism. ================================================ FILE: src/actions/github-deployments.md ================================================ --- path: "/github-deployment-action" title: "github-deployment-action" github_url: "https://github.com/NiklasMerz/github-deployment-action" author: "NiklasMerz" subtitle: "Create deployments on Github with actions" tags: ["actions","github-actions","deployment","github-deployment","github-action"] --- # Create Github deployments in you actions > If you have any questions please ping me. This action basically works but has not all features I want it to. This actions allows you to create a deployment and set a deployment status. For options please see `deployment.js` and the [Github documentation](https://developer.github.com/v3/repos/deployments/) First create a deployment and with flag `-f` create the success status: ```` - name: create deployment uses: niklasmerz/github-deployment-action@master if: contains(github.ref, 'master') env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: args: -o niklasmerz -r myrepo -c master -e production - name: set deployment status uses: niklasmerz/github-deployment-action@master if: contains(github.ref, 'master') env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: args: -o niklasmerz -r myrepo -s success -u https://url.com -f ```` ================================================ FILE: src/actions/github-push-action.md ================================================ --- path: '/github-push-action' title: 'github-push-action' github_url: 'https://github.com/ad-m/github-push-action' author: 'ad-m' tags: ['git'] subtitle: 'The GitHub Actions for pushing to GitHub repository local changes authorizing using GitHub token.' --- # GitHub Action for GitHub Push The GitHub Actions for pushing to GitHub repository local changes authorizing using GitHub token. With ease: - update new code placed in the repository, e.g. by running a linter on it, - track changes in script results using Git as archive, - publish page using GitHub-Pages, - mirror changes to a separate repository. ## Example Workflow file An example workflow to authenticate with GitHub Platform: ```yaml jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@master - name: Create local changes run: | ... - name: Commit files run: | git config --local user.email "action@github.com" git config --local user.name "GitHub Action" git commit -m "Add changes" -a - name: Push changes uses: ad-m/github-push-action@master with: github_token: ${{ secrets.GITHUB_TOKEN }} ``` ## Inputs | name | value | default | description | | ---- | ----- | ------- | ----------- | | github_token | string | | Token for the repo. Can be passed in using `${{ secrets.GITHUB_TOKEN }}`. | | branch | string | 'master' | Destination branch to push changes. | | force | boolean | false | Determines if force push is used. | | directory | string | '.' | Directory to change to before pushing. | | repository | string | '' | Repository name. Default or empty repository name represents current github repository. If you want to push to other repository, you should make a [personal access token](https://github.com/settings/tokens) and use it as the `github_token` input. | ## No affiliation with GitHub Inc. GitHub are registered trademarks of GitHub, Inc. GitHub name used in this project are for identification purposes only. The project is not associated in any way with GitHub Inc. and is not an official solution of GitHub Inc. It was made available in order to facilitate the use of the site GitHub. ================================================ FILE: src/actions/github-wiki.md ================================================ --- path: "/github-wiki-action" title: "github-wiki-action" github_url: "https://github.com/Andrew-Chen-Wang/github-wiki-action" author: "Andrew-Chen-Wang" subtitle: "Updates your GitHub wiki by using rsync" tags: ["actions","wiki","github-actions"] --- # Andrew-Chen-Wang/github-wiki-action@v2 Updates your GitHub wiki by using rsync. This action updates your repository's wiki based on a single directory that matches with your Wiki's git. You can use a Wiki directory from any repository you wish. _**It is recommended that you still have a Home.md or whatever extension you want instead of MD.**_ This is so that GitHub doesn't automatically make a Home.md for you again. Table of Contents: - Features - Usage - Inputs - Inspiration - License - Non-Affiliation with Github Inc. --- ### Features - rsync all your files from one directory (either from the current or other repository) to your GitHub's repo's wiki. - rsyncing from a different repository requires a [GitHub PAT](https://github.com/settings/tokens/new?scopes=repo&description=wiki%20page%20creator%20token) - Use the commit message from your repository's git's commit. You can specify a custom one if you want. - Be able to exclude files and directories based on an input of a list. --- ### Usage You must have a single wiki page available from the beginning. It can be blank, but there must be at least one page that exists. You must also have a directory where all your wiki files will be located (the default directory is "wiki/"). To include the mandatory homepage, have a file in your wiki/ directory called Home.md or with any other extension (e.g. rst). ```yaml name: Deploy Wiki on: push: paths: # Trigger only when wiki directory changes - 'wiki/**' branches: # And only on master branch - master jobs: deploy-wiki: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Push Wiki Changes uses: Andrew-Chen-Wang/github-wiki-action@v2 env: # Make sure you have that / at the end. We use rsync # WIKI_DIR's default is wiki/ WIKI_DIR: wiki/ GH_PAT: ${{ secrets.GITHUB_TOKEN }} GH_MAIL: ${{ secrets.YOUR_EMAIL }} GH_NAME: ${{ github.repository_owner }} EXCLUDED_FILES: "a/ b.md" ``` If you plan on having a different repository host your wiki directory, you're going to need a Personal Access Token instead of the `GITHUB_TOKEN` with the minimal scopes [seen here.](https://github.com/settings/tokens/new?scopes=repo&description=wiki%20page%20creator%20token) --- ### Inputs | Argument | Required | Default value | Description | |----------|----------|---------------|-------------| | WIKI_DIR | No | wiki/ | Directory to rsync files to the wiki.(https://github.com/settings/tokens/new?scopes=repo). | | GH_TOKEN | Yes | | The GitHub Token for this action to use. Specify `${{ secrets.GITHUB_TOKEN }}`. | | GH_MAIL | Yes | | The email associated with the token. | | GH_NAME | Yes | | The username associated with the token. | | EXCLUDED_FILES | No | | The files or directories you want to exclude. Note, we use rsync | | REPO | No | `${{ github.repository }}` | The target repository. Default is the current repo. If you specify a different repository (e.g. Andrew-Chen-Wang/github-wiki-action), then you must use a PAT. | | WIKI_PUSH_MESSAGE | No | Your commit's message | The message to add to your commit to the wiki git | --- ### Inspiration This intended usage was to avoid hosting a private ReadTheDocs and instead just use GitHub wiki. Largely inspired by [wiki-page-creator-action](https://github.com/Decathlon/wiki-page-creator-action) and the [issue that arose from it](https://github.com/Decathlon/wiki-page-creator-action/issues/11), this GitHub action tries to update the entire wiki based on a single directory. --- ### License ``` Copyright 2020 Andrew Chen Wang Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ``` --- ### Non-Affiliation with GitHub Inc. This repository/action and its creator is not affiliated with GitHub Inc. ================================================ FILE: src/actions/golang.md ================================================ --- path: '/golang' title: 'Golang' github_url: 'https://github.com/cedrickring/golang-action' author: 'cedrickring' tags: ['golang', 'go'] subtitle: 'This Action allows you to run Go commands with your code. It will automatically setup your workspace (~/go/src/github.com//) before the command is run.' --- ## How to use 1. Add an Action 2. Enter "cedrickring/golang-action@1.0.0" 3. Add a command in the args section like: ```bash go build -o my_executable main.go ``` or run your `make` targets with ```bash make test ``` ================================================ FILE: src/actions/google-cloud-platform.md ================================================ --- path: '/google-cloud-platform' title: 'Google Cloud Platform' github_url: 'https://github.com/actions/gcloud' author: 'github' tags: ['google', 'cloud', 'platform', 'containers'] subtitle: 'GitHub Actions for Google Cloud Platform, for performing common tasks such as authorizing and tagging containers, as well as a generic cli for doing arbitrary actions with the Google cloud SDK command-line client.' --- ## Usage Usage information for individual commands can be found in their respective directories. - [`cli`](/cli) - [`auth`](/auth) ================================================ FILE: src/actions/goreleaser.md ================================================ --- path: "/goreleaser" title: "GoReleaser" github_url: "https://github.com/goreleaser/goreleaser" author: "goreleaser" subtitle: "GoReleaser: Deliver Go binaries as fast and easily as possible ." tags: ["golang", "go", "release-automation", "docker", "snapcraft", "package", "rpm", "deb"] --- https://goreleaser.com/actions/ ## Usage You can create a workflow like this to push your releases. ```hcl workflow "Release" { on = "push" resolves = ["goreleaser"] } action "is-tag" { uses = "actions/bin/filter@master" args = "tag" } action "goreleaser" { uses = "docker://goreleaser/goreleaser" secrets = [ "GITHUB_TOKEN", # at least GITHUB_TOKEN is required, you may need more though "DOCKER_USERNAME", "DOCKER_PASSWORD", ] args = "release" needs = ["is-tag"] } ``` This should support almost everything already supported by GoReleaser’s [Docker image](https://hub.docker.com/r/goreleaser/goreleaser). Check the [install](https://goreleaser.com/install) section for more details. ## What doesn’t work Projects that depend on `$GOPATH`. GitHub Actions override the `WORKDIR` instruction and it seems like we can’t override it. In the future releases we may hack something together to work around this, but, for now, only projects using Go modules are supported. ================================================ FILE: src/actions/gradle.md ================================================ --- path: '/gradle' title: 'gradle' github_url: 'https://github.com/MrRamych/gradle-actions' author: 'MrRamych' subtitle: 'Github Actions for Gradle' tags: ['github', 'github-actions', 'workflow', 'gradle', 'wrapper'] --- # Github Actions for Gradle Execute [Gradle](https://github.com/gradle/gradle) task using wrapper. ## Usage To create action in visual editor use `MrRamych/gradle-actions@master` repo. The `args` represent the task to be executed. ## Example An example `main.workflow` file to run tests on push. ``` workflow "Push" { on = "push" resolves = ["Test"] } action "Test" { uses = "MrRamych/gradle-actions@master" args = "test" } ``` ================================================ FILE: src/actions/graphql-inspector.md ================================================ --- path: '/graphql-inspector' title: 'GraphQL Inspector' github_url: 'https://github.com/kamilkisiela/graphql-inspector' author: 'kamilkisiela' tags: ['graphql'] subtitle: 'A tool that inspects GraphQL API in order to find breaking changes or changes that are dangerous or entirely safe.' --- More information at [https://github.com/kamilkisiela/graphql-inspector](https://github.com/kamilkisiela/graphql-inspector) ================================================ FILE: src/actions/hadolint.md ================================================ --- path: '/hadolint' title: 'Hadolint' github_url: 'https://github.com/burdzwastaken/hadolint-action' author: 'burdzwastaken' tags: ['dockerfile', 'docker', 'hadolint'] subtitle: 'A GitHub action to run hadolint and reports violations given a Dockerfile within a repository on a pull request' --- ## Usage ``` workflow "hadolint action" { on = "pull_request" resolves = ["hadolint on pr"] } action "hadolint on pr" { uses = "burdzwastaken/hadolint-action@master" secrets = ["GITHUB_TOKEN"] env = { HADOLINT_ACTION_DOCKERFILE_FOLDER = "." } } ``` ## Environment Variables | Name | Default | Description | | ----------------------------------- | ------- | ------------------------------------------------------------------------------------------------------- | | `HADOLINT_ACTION_DOCKERFILE_FOLDER` | `.` | Which directory the `Dockerfile` to run hadolint on resides in. Relative to the root of the repository. | | `HADOLINT_ACTION_COMMENT` | `true` | Set to `false` to disable commenting back on the PR with the violations found in the `Dockerfile`. | ![demo](images/404-no-beta-access) ## TODO - Let users supply their own configuration file - Multiple `Dockerfile` support ================================================ FILE: src/actions/heroku.md ================================================ --- path: '/heroku-cli' title: 'Heroku CLI' github_url: 'https://github.com/actions/heroku' author: 'github' tags: ['heroku', 'cli'] subtitle: 'This Action wraps the Heroku CLI to enable common Heroku commands.' --- ## Usage An example workflow to build a docker container from source and push and release the image to an existing application on Heroku: ``` workflow "Deploy to Heroku" { on = "push" resolves = "release" } action "login" { uses = "actions/heroku@master" args = "container:login" secrets = ["HEROKU_API_KEY"] } action "push" { uses = "actions/heroku@master" needs = "login" args = "container:push -a calm-fortress-1234 web" secrets = ["HEROKU_API_KEY"] } action "release" { uses = "actions/heroku@master" needs = "push" args = "container:release -a calm-fortress-1234 web" secrets = ["HEROKU_API_KEY"] } ``` ### Secrets - `HEROKU_API_KEY` - **Required**. The token to use for authentication with the Heroku API ([more info](https://help.heroku.com/PBGP6IDE/how-should-i-generate-an-api-key-that-allows-me-to-use-the-heroku-platform-api)) ### Environment variables - `HEROKU_APP` - **Optional**. To specify a Heroku application ## License The Dockerfile and associated scripts and documentation in this project are released under the [MIT License](LICENSE). Container images built with this project include third party materials. See [THIRD_PARTY_NOTICE.md](THIRD_PARTY_NOTICE.md) for details. ================================================ FILE: src/actions/home-assistant.md ================================================ --- path: '/home-assistant' title: 'Home Assistant' github_url: 'https://github.com/maddox/actions' author: 'maddox' tags: ['github', 'google', 'home', 'assistant'] subtitle: 'Control your home via Home Assistant. This action allows you to make a service call to your Home Assistant instance. Blink a light when a deploy is done, set your lights to green when CI goes green, lock your front door until the deploy is complete. Of course you want to incorporate your smart devices into your GitHub workflow!' --- image ## Usage To use the action simply add the following lines to your `.github/main.workflow` and provide the required Secrets and Environment Variables ``` action "Flash office lights" { uses = "maddox/actions/home-assistant@master" secrets = ["HASS_HOST", "HASS_TOKEN"] env = { SERVICE_DATA = "{\n \"entity_id\": \"light.office\",\n \"flash\": \"short\"\n}" DOMAIN = "light" SERVICE = "turn_on" } } ``` ### Minimum Home Assistant Version In order to use this action, your Home Assistant instance's version must be > 0.78. This action uses the new user auth scheme that has been added along with the long-lived access tokens you can generate. Once you are on a valid version, you can create a long-lived access token from your profile page. Click your user in the side bar to access the `Long-Lived Access Tokens` section at the bottom of the page. ### Required Secrets You'll need to provide some secrets to use the action. - **HASS_HOST**: Your fully qualified host address for your Home Assistant instance, ie `https://home.yourname.com` or `https://98.22.42.53`. - **HASS_TOKEN**: Your long-lived access token. ### Required Environment Variables You'll need to provide some environment variables to specify exactly what you want to do. - **DOMAIN**: The domain of the device you want to control. ie, `light`, `script`, `media_player`. - **SERVICE**: The service you want called on that domain. ie, `turn_on`, `pause`. - **SERVICE_DATA**: A JSON string of data for the service call. ie, `{"entity_id":"light.living_room_window", "flash": "short"}` [Learn more](https://developers.home-assistant.io/docs/en/external_api_rest.html#post-api-services-lt-domain-lt-service) about service calls via the REST api. ================================================ FILE: src/actions/httpie-action.md ================================================ --- path: '/httpie-action' title: 'Httpie' github_url: 'https://github.com/swinton/httpie-action' author: 'swinton' tags: ['http', 'cli'] subtitle: 'A general purpose HTTP client for GitHub Actions, wrapping the HTTPie CLI to enable human-friendly interactions with third-party web services that expose an API over HTTP in your development workflow.' --- ## Why not just use webhooks? Great question! Webhooks will likely _just work_ in the vast majority of cases :sparkles: In certain situations though, this may be a better solution, as it provides more fine-grained control over the HTTP request that gets sent, for example you can: 1. Form an entirely custom payload 1. Use a variety of different authentication methods 1. Use a variety of different request methods (`GET`, `POST`, `PATCH`, etc.) 1. Send a variety of different MIME types 1. Follow any redirects 1. Act on the HTTP response 1. Basically, leverage all of [the features of HTTPie](https://github.com/jakubroztocil/httpie/blob/1.0.2/README.rst#main-features) :sparkles: ## Super simple example To `POST` some `JSON` data, `{"hello": "world"}`, to `https://httpbin.org/anything` on every `push` to the repo: ```hcl workflow "Call external API" { on = "push" resolves = ["Call httpbin"] } action "Call httpbin" { uses = "swinton/httpie-action@master" args = ["POST", "httpbin.org/anything", "hello=world"] } ``` ## More examples ### Using output in a downstream action In this more advanced, but somewhat contrived, example we'll open an issue in the current repository, and then comment and close that issue in subsequent actions. **Note**, this is made possible since the response body is preserved in a file, `$HOME/$GITHUB_ACTION.response.body` (along with response headers, in `$HOME/$GITHUB_ACTION.response.headers`, and the entire response, in `$HOME/$GITHUB_ACTION.response`). The response can then be parsed in downstream actions using [`jq`](https://stedolan.github.io/jq/), a _command-line JSON processor_, which is _pre-baked_ into the container. ```hcl action "Issue" { uses = "swinton/httpie-action@master" args = ["--auth-type=jwt", "--auth=$GITHUB_TOKEN", "POST", "api.github.com/repos/$GITHUB_REPOSITORY/issues", "title=Hello\\ world"] secrets = ["GITHUB_TOKEN"] } action "Comment on issue" { needs = ["Issue"] uses = "swinton/httpie-action@master" args = ["--auth-type=jwt", "--auth=$GITHUB_TOKEN", "POST", "`jq .comments_url /github/home/Issue.response.body --raw-output`", "body=Thanks\\ for\\ playing\\ :v:"] secrets = ["GITHUB_TOKEN"] } action "Close issue" { needs = ["Issue"] uses = "swinton/httpie-action@master" args = ["--auth-type=jwt", "--auth=$GITHUB_TOKEN", "PATCH", "`jq .url /github/home/Issue.response.body --raw-output`", "state=closed"] secrets = ["GITHUB_TOKEN"] } ``` ### Trigger another workflow In this example, we'll trigger a separate workflow, via [the repository's dispatches endpoint](https://developer.github.com/actions/creating-workflows/triggering-a-repositorydispatch-webhook/#how-to-trigger-the-repositorydispatch-webhook). **Note**, `$PAT` refers to a personal access token, [created separately](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/), and [stored as a secret](https://developer.github.com/actions/creating-workflows/storing-secrets/). ```hcl action "Trigger workflow" { uses = "swinton/httpie-action@master" args = ["--auth-type=jwt", "--auth=$PAT", "POST", "api.github.com/repos/$GITHUB_REPOSITORY/dispatches", "Accept:application/vnd.github.everest-preview+json", "event_type=demo"] secrets = ["PAT"] } ``` ## Presets Some [HTTPie presets](https://github.com/jakubroztocil/httpie/blob/1.0.2//README.rst#config) are applied by default by the included [`config.json`](config.json), that make sense in the context of GitHub Actions, namely: 1. [`--check-status`](https://github.com/jakubroztocil/httpie/blob/1.0.2//README.rst#scripting): Causes a workflow to exit if the HTTP status is one of `3xx`, `4xx`, or `5xx` 1. [`--ignore-stdin`](https://github.com/jakubroztocil/httpie/blob/1.0.2//README.rst#best-practices): Disables HTTPie's default behaviour of automatically reading STDIN, typically not desirable during non-interactive invocations 1. [`--default-scheme=https`](https://github.com/jakubroztocil/httpie/blob/1.0.2//README.rst#custom-default-scheme): Assumes `https://` is the default prefix for URLs, so you can just say (for example) `api.github.com/zen` as opposed to `https://api.github.com/zen` 1. [`--print=hb`](https://github.com/jakubroztocil/httpie/blob/1.0.2//README.rst#output-options): Prints both response headers _and_ response body in the output ## Plugins A few [authentication plugins](https://github.com/jakubroztocil/httpie/blob/1.0.2//README.rst#auth-plugins) are included: 1. [`httpie-api-auth`](https://github.com/pd/httpie-api-auth): Provides support for the ApiAuth authentication scheme 1. [`httpie-aws-auth`](https://github.com/httpie/httpie-aws-auth): Provides support AWS authentication 1. [`httpie-hmac-auth`](https://github.com/guardian/httpie-hmac-auth): Provides support for HMAC authentication 1. [`httpie-jwt-auth`](https://github.com/teracyhq/httpie-jwt-auth): Provides support for JSON Web Tokens ## More info Usage docs for HTTPie are [here](https://github.com/jakubroztocil/httpie). ================================================ FILE: src/actions/hugo-to-github-pages.md ================================================ --- path: '/hugo-to-github-pages' title: 'Build Hugo static content site and publish it to gh-pages branch' github_url: 'https://github.com/khanhicetea/gh-actions-hugo-deploy-gh-pages' author: 'khanhicetea' tags: ['hugo'] subtitle: 'GitHub Action for building and publishing Hugo-built site.' --- Inspired by [BryanSchuetz/jekyll-deploy-gh-pages](https://github.com/BryanSchuetz/jekyll-deploy-gh-pages) ## Secrets - `GITHUB_TOKEN` - _Required_ for pushing files to gh-pages branch. ## Environment Variables NOTHING ## Example **main.workflow** ```hcl workflow "Deploy to GitHub Pages" { on = "push" resolves = ["hugo-deploy-gh-pages"] } action "hugo-deploy-gh-pages" { uses = "khanhicetea/gh-actions-hugo-deploy-gh-pages@master" secrets = ["GITHUB_TOKEN"] } ``` ## Example site - https://github.com/khanhicetea/.com ================================================ FILE: src/actions/install-qt-action.md ================================================ --- path: "/install-qt-action" title: "Install Qt" github_url: "https://github.com/jurplel/install-qt-action" author: "jurplel" subtitle: "Install Qt on your Github Actions workflows with just one simple action" tags: [] --- # `install-qt-action` Installing Qt on Github Actions workflows manually is the worst. You know what's easier than dealing with that? Just using this: ```yml - name: Install Qt uses: jurplel/install-qt-action@v1 ``` All done. ## Options ### `version` The desired version of Qt to install. Default: `5.12.5` (Latest LTS at the time of writing) ### `host` This is the host platform of the Qt version you will be installing. It's unlikely that you will need to set this manually if you are just building. For example, if you are building on Linux and targeting desktop, you would set host to `linux`. If you are building on Linux and targeting android, you would set host to `linux` also. The host platform is the platform that your application will build on, not its target platform. Possible values: `windows`, `mac`, or `linux` Defaults to the current platform it is being run on. ### `target` This is the target platform that you will be building for. You will want to set this if you are building for iOS or Android. **Please note that iOS builds are supported only on macOS hosts** Possible values: `desktop`, `android`, or `ios` Default: `desktop` ### `arch` This is the target architecture that your program will be built for. This is only used for Windows and Android. **Linux x86 packages are not supported by this action.** Qt does not offer pre-built Linux x86 packages. Please consider using your distro's repository or building it manually. **Possible values:** Windows: `win64_msvc2017_64`, `win64_msvc2015_64`, `win32_msvc2015`, `win32_mingw53`, or `win64_mingw73` Android: `android_x86`, `android_armv7` **Default values:** Windows: `win64_msvc2017_64` Android: `android_armv7` ### `dir` This is the directory prefix that Qt will be installed to. For example, if you set dir to `/example/`, your bin folder will be located at `/example/Qt5.12.5/5.12.5/(your_arch)/bin`. When possible, access your Qt directory through the `Qt5_Dir` environment variable. Default: `${RUNNER_WORKSPACE}` (this is one above the starting directory) ## More info The Qt bin directory is added to your `path` environment variable. `Qt5_Dir` is also set appropriately for cmake. Big thanks to the [aqtinstall](https://github.com/miurahr/aqtinstall/) developers for making this easy. Please go support them, they did all of the hard work here. This action is distributed under the [MIT license](LICENSE). By using this action, you agree to the terms of Qt's licensing. See [Qt licensing](https://www.qt.io/licensing/) and [Licenses used by Qt](https://doc.qt.io/qt-5/licenses-used-in-qt.html). ================================================ FILE: src/actions/issue-label-manager.md ================================================ --- path: '/issue-label-manager' title: 'Issue Label Manager' github_url: 'https://github.com/lannonbr/issue-label-manager-action' author: 'lannonbr' tags: ['github', 'labels', 'automation'] subtitle: 'This GitHub Action allows you to declaratively state the labels to be defined in a repo.' --- In the repo you'd like to use this, define a JSON file in `.github/labels.json`. This file will contain an array of objects that have a name, color, and description as shown in the example below. ![labels.json file](https://github.com/lannonbr/issue-label-manager-action/raw/master/screenshots/json.png) Then, set up a workflow that executes this action. When run, it will update the list of labels in the repo to match the JSON file and will delete any other labels. The result of using the labels.json file shown above is as follows: ![Labels result](https://github.com/lannonbr/issue-label-manager-action/raw/master/screenshots/labels.png) If a label doesn't need a description, leave out the `description` field of the entry in the json file and when deployed the label will not contain a description. ## Usage This action only needs the GITHUB_TOKEN secret as it interacts with the GitHub API to modify labels. The action can be used as such: ```hcl action "Update Label" { uses = "lannonbr/issue-label-manager-action@master" secrets = ["GITHUB_TOKEN"] } ``` ================================================ FILE: src/actions/jekyll-builds-on-github-pages.md ================================================ --- path: '/jekyll-builds-on-github-pages' title: 'Custom Jekyll Builds on GitHub Pages' github_url: 'https://github.com/BryanSchuetz/jekyll-deploy-gh-pages' author: 'BryanSchuetz' tags: ['Jekyll', 'github', 'pages'] subtitle: ' A GitHub Action for building and deploying a Jekyll repo back to its gh-pages branch. Why not just let GitHub Pages build it? Becaues this way we can use our own custom Jekyll plugins and build scripts.' --- ## Secrets - `GITHUB_TOKEN`: Access key scoped to the repository, we need this to push the site files back to the repo. (specify in workflow) ## Environment Variables - `GITHUB_ACTOR`: Username of repo owner or object intiating the action (GitHub Provides) - `GITHUB_REPO`: Owner/Repository (GitHub Provides) ## Examples ```hcl workflow "Deploy Site" { on = "push" resolves = ["Build and Deploy Jekyll"] } action "Build and Deploy Jekyll" { uses = "BryanSchuetz/jekyll-deploy-gh-pages@master" secrets = ["GITHUB_TOKEN"] } ``` Clones the repo, builds the site, and commits it back to the gh-pages branch of the repository. ## Caveats - Needs a .gemfile - `destination:` should be set to `./build` in your \_config.yml file—as God demands. - Be sure that any custom gems needed are included in your Gemfile. - If you're looking to seperate out the build/deploy steps of this action so you can throw your own actions in between them, look at the limited build and deploy actions in this rpo. ================================================ FILE: src/actions/jenkins-single-shot.md ================================================ --- path: '/jenkins-single-shot' title: 'POC for Jenkins Single-shot master' github_url: 'https://github.com/jonico/jenkinsfile-runner-github-actions' author: 'jonico' tags: ['jenkins'] subtitle: 'This is a POC how to run Jenkins Single-shot masters inside a GitHub Action Workflow.' --- ![image](https://user-images.githubusercontent.com/1872314/47345918-3b280e80-d6ac-11e8-9f44-8cc02754f691.png) Any GitHub project with a `Jenkinsfile`can use those actions to execute its defined workflow inside a Docker container run by GitHub that spawns up a new Jenkins master, executes the tests and exits. The commit that triggered the GitHub Action is [automatically mapped](https://developer.github.com/actions/creating-github-actions/accessing-the-runtime-environment/#filesystem) to `/github/workspace` in the Jenkins Docker container. Test results are reported back to the corresponding pull requests. ![image](https://user-images.githubusercontent.com/1872314/47347618-ed150a00-d6af-11e8-87f7-e425c6a43867.png) ![image](https://user-images.githubusercontent.com/1872314/47346015-732f5180-d6ac-11e8-9fbd-9c534e7b3f34.png) ## Available GitHub Actions The POC comes with two actions: #### [jenkinsfile-runner-prepackaged](https://github.com/jonico/jenkinsfile-runner-github-actions/tree/master/jenkinsfile-runner-prepackaged) (recommended) Uses the [official Jenkinsfile-Runner](https://github.com/jenkinsci/jenkinsfile-runner) and prepackages Jenkins 2.138.2 and Maven 3.5.2 with it. There is also a [Dockerfile](https://hub.docker.com/r/jonico/jenkinsfile-runner-prepackaged/) available you could refer to in [your workflow](https://help.github.com/articles/about-github-actions/#about-workflows) if you do not like to [refer to the source](https://github.com/jonico/jenkinsfile-runner-github-actions/tree/master/jenkinsfile-runner-prepackaged). #### [jenkinsfile-runner-lazyloaded](https://github.com/jonico/jenkinsfile-runner-github-actions/tree/master/jenkinsfile-runner-lazyloaded) Uses [an alternative Jenkinsfile-Runner implementation](https://github.com/ndeloof/jenkinsfile-runner) that first downloads the latest version of Jenkins LTS and all plugins specified in `plugins.txt` in the commit that is triggering the GitHub Action. There is also a [Dockerfile](https://hub.docker.com/r/jonico/jenkinsfile-runner-lazyloaded/) available you could refer to in [your workflow](https://help.github.com/articles/about-github-actions/#about-workflows) if you do not like to [refer to the source](https://github.com/jonico/jenkinsfile-runner-github-actions/tree/master/jenkinsfile-runner-lazyloaded). ## How to use the actions Here is an example [GitHub Action workflow](https://help.github.com/articles/about-github-actions/#about-workflows) that shows how to use the actions in parallel: ``` workflow "Jenkins single-shot master" { on = "push" resolves = ["jenkinsfile-runner-lazyloaded", "jenkinsfile-runner-prepackaged"] } action "jenkinsfile-runner-prepackaged" { uses = "jonico/jenkinsfile-runner-github-actions/jenkinsfile-runner-prepackaged@master" secrets = ["GITHUB_TOKEN"] } action "jenkinsfile-runner-lazyloaded" { uses = "docker://jonico/jenkinsfile-runner-lazyloaded" secrets = ["GITHUB_TOKEN"] } ``` For anything else but demonstration purposes, you probably only want to run one approach (and not both in parallel). For this case, just remove the action you do not need from the [`resolves`](https://developer.github.com/actions/creating-workflows/workflow-configuration-options/#workflow-blocks) attribute of the workflow. ## An example Jenkinsfile that was tested with this ```groovy #!groovy import groovy.json.JsonOutput node { // pull request or feature branch if (env.GITHUB_REF != 'refs/heads/master') { checkoutSource() build() unitTest() } // master branch / production else { checkoutSource() build() allTests() createRelease("${env.GITHUB_ACTION}-${env.GITHUB_SHA}") } } def createRelease(name) { stage ('createRelease') { def payload = JsonOutput.toJson(["tag_name": "v-${name}", "name": "GitHub Action triggered release: ${name}", "body": "This release has been created with the help of a Jenkins single-shot master running inside of a GitHub Action. For more details visit https://github.com/jonico/jenkinsfile-runner-github-actions"]) def apiUrl = "https://api.github.com/repos/${env.GITHUB_REPOSITORY}/releases" mysh("curl -s --output /dev/null -H \"Authorization: Token ${env.GITHUB_TOKEN}\" -H \"Accept: application/json\" -H \"Content-type: application/json\" -X POST -d '${payload}' ${apiUrl}") } } // prevent output of secrets and a globbing patterns by Jenkins def mysh(cmd) { sh('#!/bin/sh -e\n' + cmd) } def checkoutSource() { stage ('checkoutSource') { // as the commit that triggered that Jenkins action is already mapped to /github/workspace, we just copy that to the workspace copyFilesToWorkSpace() } } def copyFilesToWorkSpace() { mysh "cp -r /github/workspace/* $WORKSPACE" } def build () { stage ('Build') { mvn 'clean install -DskipTests=true -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true -B -V' } } def unitTest() { stage ('Unit tests') { mvn 'test -B -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true' } } def allTests() { stage ('All tests') { // don't skip anything mvn 'test -B' } } def mvn(args) { sh "mvn ${args} -Dmaven.repo.local=/github/workspace/.m2" } ``` There are some things to point out with this example: - the commit who triggered the action is placed by GitHub Actions into `/github/workspace` and the `checkoutSource` function is just doing a file copy of all files in this directory to the job's workspace (can probably be optimized) - maven's local repo is set to `/github/workspace/.m2` as the workspace directory is [shared across actions](https://developer.github.com/actions/creating-github-actions/accessing-the-runtime-environment/#filesystem) of the same workflow - so far, Jenkins environmental variables are not populated based on the [GitHub Actions context](https://developer.github.com/actions/creating-github-actions/accessing-the-runtime-environment/#environment-variables) - instead, the GitHub Action environmental variable `GITHUB_REF` - there is no need to explicitly set the commit status after the build finishes as GitHub Actions will do this automatically based on the exit code of the wrapped action - the `mysh`function is used to not show shell glob expansion or `GITHUB_SECRET` in the Jenkinsfile ![image](https://user-images.githubusercontent.com/1872314/47358580-64579780-d6ca-11e8-8f75-484bdc661a10.png) ## Local Trouble-shooting / customize the packaged Jenkins and plugins #### Jenkinsfile-Runner Prepackaged ```bash docker pull jonico/jenkinsfile-runner-prepackaged ``` or if you like to build the Docker image from scratch ```bash git clone https://github.com/jonico/jenkinsfile-runner-github-actions.git cd jenkinsfile-runner-github-actions/jenkinsfile-runner-prepackaged docker build -t jonico/jenkinsfile-runner-prepackaged . ``` Then, cd to your git repo that contains your Jenkinsfile and mount it to `/github/workspace` while running the docker container ```bash cd docker run --rm -it -v $(pwd):/github/workspace jonico/jenkinsfile-runner-prepackaged ``` If you are using environmental variables in your `Jenkinsfile`, you would have to specify them using the "-e" command line option for docker: ```bash docker run --rm -it -v $(pwd):/github/workspace -e GITHUB_REPOSITORY=jonico/reading-time-app -e GITUB_GITHUB_REF=refs/heads/create-releases -e GITHUB_ACTION=jenkinsfile-runner-prepackaged -e GITHUB_SHA=mysha-3 -e GITHUB_TOKEN= jonico/jenkinsfile-runner-prepackaged ``` In case you like to modify the [Docker base image](https://hub.docker.com/r/jonico/jenkinsfile-runner-github-action/) that defines which version of Jenkins and which plugins are included, you find the Dockerfile [here](https://github.com/jonico/jenkinsfile-runner/blob/master/Dockerfile). #### Jenkinsfile-Runner Lazyloaded ```bash docker pull jonico/jenkinsfile-runner-lazyloaded ``` or if you like to build the Docker image from scratch ```bash git clone https://github.com/jonico/jenkinsfile-runner-github-actions.git cd jenkinsfile-runner-github-actions/jenkinsfile-runner-lazyloaded docker build -t jonico/jenkinsfile-runner-lazyloaded . ``` Then, cd to your git repo that contains your Jenkinsfile and mount it to `/github/workspace` while running the docker container ```bash cd docker run --rm -it -v $(pwd):/github/workspace jonico/jenkinsfile-runner-lazyloaded ``` If you are using environmental variables in your `Jenkinsfile`, you would have to specify them using the "-e" command line option for docker. ```bash docker run --rm -it -v $(pwd):/github/workspace -e GITHUB_REPOSITORY=jonico/reading-time-app -e GITUB_GITHUB_REF=refs/heads/create-releases -e GITHUB_ACTION=jenkinsfile-runner-lazyloaded -e GITHUB_SHA=mysha-3 -e GITHUB_TOKEN= jonico/jenkinsfile-runner-lazyloaded ``` The customization of the [underlying Docker base image](https://hub.docker.com/r/jenkins/jenkinsfile-runner/) can be done [by customizing this repo](https://github.com/ndeloof/jenkinsfile-runner). ## Current Limitations / TODOs This is just a POC, in order to productize this, you would probably - [Automate](https://jenkins.io/blog/2018/10/16/custom-war-packager/#jenkinsfile-runner-packaging) the creation of the pre-packaged Jenkins Docker container - populate Jenkins environmental variables based on the [GitHub Actions context](https://developer.github.com/actions/creating-github-actions/accessing-the-runtime-environment/#environment-variables) - Find a better way to populate the job workspace with the content of `/github/workspace` other than manually copying the files over as part of your `Jenkinsfile` - Find a better way to package maven binaries and additional plugins - Find a better way to share maven plugins other than manually mapping the local maven repo to `/github/workspace/.m2` in your `Jenkinsfile` - Find a better way to cache the lazy-loaded Jenkins as `/github/workspace/.jenkinsfile-runner-cache` as specified [here](https://github.com/jonico/jenkinsfile-runner-github-actions/blob/master/jenkinsfile-runner-lazyloaded/Dockerfile#L19) - Add examples of how to work with [Jenkins secrets](https://github.com/ndeloof/jenkinsfile-runner#sensitive-data) - Provide examples how to copy parts of the Jenkins results to an external storage ================================================ FILE: src/actions/js-build-tools.md ================================================ --- path: '/js-build-tools' title: 'JavaScript Build Tools' github_url: 'https://github.com/elstudio/actions-js-build' author: 'elstudio' tags: ['npm', 'grunt', 'gulp', 'css', 'sass', 'less'] subtitle: 'Run JS build tasks with Gulp, Grunt or NPM, then commit any changed files and push them back to your original repository. Perfect for Grunt or Gulp tasks that do CSS (or SASS/LESS) compilation or JS transpilation. If your build task changes files, these actions are for you.' --- This repository contains two actions that may be used independently -- typically one after another: - **build** (elstudio/actions-js-build/build@master): Looks for a gulpfile.js or Gruntfile.js in the working directory, then installs any required npm packages and runs the appropriate build tool. If it finds neither gulp or grunt, the script runs npm. Set the workflow `args` arguments to run the tasks of your choice. - **commit** (elstudio/actions-js-build/commit@master): Commits any file changes, and pushes them back to the current branch of the origin repository on GitHub. ## Usage An example workflow to run `grunt default` task to build, test, then commit and push any changes back to the GitHub origin repository: ```hcl workflow "Grunt compile" { on = "push" resolves = ["Commit and Push"] } action "Build" { uses = "elstudio/actions-js-build/build@master" env = { WD_PATH = "./web/themes/nw8" } args = "default" } action "Commit and Push" { uses = "elstudio/actions-js-build/commit@master" needs = ["Build"] secrets = ["GITHUB_TOKEN"] env = { PUSH_BRANCH = "staging" } } ``` ### Secrets - `GITHUB_TOKEN` - **Required**. The token to use for authentication with GitHub to commit and push changes back to the origin repository. ([more info](https://developer.github.com/actions/creating-github-actions/accessing-the-runtime-environment/#environment-variables)) ### Environment variables - `WD_PATH` - **Optional**. To specify a directory other than the repository root where NPM's Package.json and either gulpfile.js or Gruntfile.js may be found. - `PUSH_BRANCH` - **Optional**. The branch that changes will be pushed to. Default is the currently checked out branch. ================================================ FILE: src/actions/lint-pull-request.md ================================================ ### Static linting for pull requests This release supports linting pull request titles and descriptions by testing against a regular expression, supplies as action input. If the linting fails, you can configure the action to automatically leave a comment explaining the rules for pull request structure. You are free to add as many rules as you want. If the pull request passes, the action will clean up after itself to not clutter your pull request with unnecessary comments. You are also able to supply a set of labels that can be added on success, to allow prefiltering your pull requests and see which are ready for review from a structural perspective. ### Example workflow: ``` name: Lint Pull Request on: pull_request: types: [opened, edited] jobs: lint-pull-request: name: Lint Pull Request runs-on: ubuntu-latest steps: - name: Lint Pull Request uses: reaction-link/actions-lint-pull-request@v1 with: config-bot-repotoken: ${{secrets.SOME_SECRET}} config-bot-login: mybotaccount github-event: ${{toJson(github.event)}} use-title-regex: '(Feature|Bugfix|Hotfix|Release)(\/KEY-\d+)?:\s\w+' use-approval-labels: '["Good Structure"]' use-explanation-title: '["- There must be a title in this format: `Feature|Bugfix|Hotfix|Release: Title`","- If applicable, add your issue ticket (e.g. `REA-100`) with a slash in the title","- Use `Feature` for enhancements or new functionality","- Use `Bugfix` only if you fixed a known bug","- Use `Hotfix` for problems introduced by previous merges","- Use proper capitalization in your title"]' ``` ### Result on fail Bildschirmfoto 2022-03-25 um 12 16 44 ### Result on success Bildschirmfoto 2022-03-25 um 12 35 42 ### Available inputs ``` inputs: config-bot-repotoken: description: "Token with repo-scope permissions for a GitHub user (bot account for example)" required: true config-bot-login: description: "Username of the GitHub user (bot account for example)" required: true github-event: description: "toJSON of github.event (event triggering the action)" required: true use-greetings: description: "JSON string array to use for randomly selected greetings (used in comment body, runs through JSON.parse)" default: '["Hello @{name},\n"]' use-approval-labels: description: "JSON string array to use for labeling linted pull request (runs through JSON.parse)" default: '["Good"]' use-title-regex: description: "Regex string to use for linting the pull request title" default: '\w+' use-description-regex: description: "Regex string to use for linting the pull request description" default: '\w+' use-title-regex-flag: description: "Regex flag to use for linting the pull request title (Use empty string for none)" default: 'g' use-description-regex-flag: description: "Regex flag to use for linting the pull request description (Use empty string for none)" default: 'g' use-problem-title: description: "Template string to use for highlighting a title that failed to pass (used in comment body). Template-Literals: {title}" default: '- The title `{title}` is not the format I expected.' use-problem-description: description: "Template string to use for highlighting a description that failed to pass (used in comment body). Template-Literals: {body}" default: '- The description `{body}` is not the format I expected.' use-explanation-title: description: "JSON string array to describe rules to pass linting for the pull request title (used in comment body, runs through JSON.parse)" default: '["- There must be a title","- Use proper capitalization"]' use-explanation-description: description: "JSON string array to describe rules to pass linting for the pull request description (used in comment body, runs through JSON.parse)" default: '["- There must be a description"]' ``` ### Caveats - You can supply `config-bot-repotoken: ${{secrets.GITHUB_TOKEN}}` and `config-bot-login: github-actions` if you don't have a bot account. - You can supply your own user-login and a personal access token for your account (stored as a secret in private repositories) to leave comments on your behalf - Currently linting is limited to the pull request title and its description, other aspects will follow (commit messages, amount of commits, etc.) - Use the raw regular expression, don't enclose the expression in `\\` - Supply a flag for the expression with the additional inputs available - Have a look at the README or the action.yml to see available inputs, their use-cases and what is happening to them (some are JSON parsed and require string escaping for example!) - Configure the action to be a required action for pull requests against protected branches to enforce your pull request structure rules - Combine GitHub's ability to auto-link to project management software if it detects an issue key by supplying a regular expression that requires an issue key to be existent (or make it optional like in the example above) ### Happy Linting ![bot-thumbsup](https://user-images.githubusercontent.com/5528623/160114894-6e0684c6-395f-432d-8c0c-99937469eb16.png) ================================================ FILE: src/actions/mercure.md ================================================ --- path: "/action-mercure" title: "action-mercure" github_url: "https://github.com/Ilshidur/action-mercure" author: "Ilshidur" subtitle: "🚀 GitHub Action for Mercure" tags: ["mercure","server-sent-events","live-updates","push","subscription"] --- # 🚀 GitHub Action for Mercure Send a [Mercure](https://mercure.rocks) publish event. Simple as that. ![GitHub Action](https://github.com/Ilshidur/action-mercure/raw/master/action.png "GitHub Action")
## Demo 1) Go to https://demo.mercure.rocks, in the **Subscribe** section. 2) Subscribe for notifications on this *topic* : **`foo`**. 3) 🌟 Star 🌟 this repo ! 4) Quickly switch to the Mercure demo page to see a notification in your browser. ## Usage ```hcl action "Publish notification" { uses = "Ilshidur/action-mercure@master" secrets = ["MERCURE_HUB_URL", "MERCURE_HUB_JWT"] args = "{ \"hello\": \"world\" }" } ``` **NOTICE :** for stability purposes, it is recommended to use the action with an explicit commit SHA-1 : `uses = "Ilshidur/action-mercure@eea8db9"` (=> link to the commits list : https://github.com/Ilshidur/action-mercure/commits/master) ### Arguments The argument is the content of the event to send. It is **RECOMMENDED** to use JSON. **Environment variables can be interpolated** in the message using brackets (`{{` and `}}`) : e.g.: `args = "{ \"action\": \"{{ GITHUB_ACTION }}\" }"` ### Environment variables * **`MERCURE_TOPICS`**: the Mercure topics. **Supports interpolation** using (`{{` and `}}`). ### Secrets * **`MERCURE_HUB_URL`**: the **public** Mercure hub URL (**required**). * **`MERCURE_HUB_JWT`**: the publisher JWT (**required**). * That's all. ## License GNU GENERAL PUBLIC LICENSE v3.

Don't forget to 🌟 Star 🌟 the repo if you like this GitHub Action !
Your feedback is appreciated

================================================ FILE: src/actions/mjolnir.md ================================================ --- path: "/gha-mjolnir" title: "Mjolnir" github_url: "https://github.com/ldez/gha-mjolnir" author: "ldez" subtitle: ":hammer: GitHub Action to close issues related to the merge of a pull request." tags: ["github-action","issues","pull-requests","close"] --- # Mjolnir [![Release](https://img.shields.io/github/release/ldez/gha-mjolnir.svg?style=flat)](https://github.com/ldez/gha-mjolnir/releases) Closes issues related to the merge of a pull request. Useful: - to close multiple issues related to a pull request. - to close issues related to a pull request not based on the default branch (i.e. `master`). By example when a branch is related to version (e.g. `v1.5`, `v2.0`, ...) ## Supported syntax - prefixes (case insensitive): `close`, `closes`, `closed`, `fix`, `fixes`, `fixed`, `resolve`, `resolves`, `resolved` - issues references separators (can be mixed): ` ` (space), `,` (period) - prefix and issues references can be separated by: ` ` (space), `:` (colon), on both. Examples: ``` Fixes #1,#2,#3 close #1, #2, #3 fix #1 #2 #3 resolve #1,#2 #3 Resolves: #1,#2,#3 closed : #1, #2, #3 ``` ## Usage ```hcl workflow "Auto close issues" { on = "pull_request" resolves = ["mjolnir-issues"] } action "mjolnir-issues" { uses = "docker://ldez/gha-mjolnir" secrets = ["GITHUB_TOKEN"] args = "" } ``` ================================================ FILE: src/actions/my-broken-link-checker.md ================================================ --- path: "/action-my-broken-link-checker" title: "My Broken Link Checker" github_url: "https://github.com/ruzickap/action-my-broken-link-checker" author: "ruzickap" subtitle: "A GitHub Action for checking broken links." tags: ["broken-links","github-actions","github-action","actions","website","checker","links","link-checker","url-checker"] --- # GitHub Actions: My Broken Link Checker ✔ [![GitHub Marketplace](https://img.shields.io/badge/Marketplace-My%20Broken%20Link%20Checker-blue.svg?colorA=24292e&colorB=0366d6&style=flat&longCache=true&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAM6wAADOsB5dZE0gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAERSURBVCiRhZG/SsMxFEZPfsVJ61jbxaF0cRQRcRJ9hlYn30IHN/+9iquDCOIsblIrOjqKgy5aKoJQj4O3EEtbPwhJbr6Te28CmdSKeqzeqr0YbfVIrTBKakvtOl5dtTkK+v4HfA9PEyBFCY9AGVgCBLaBp1jPAyfAJ/AAdIEG0dNAiyP7+K1qIfMdonZic6+WJoBJvQlvuwDqcXadUuqPA1NKAlexbRTAIMvMOCjTbMwl1LtI/6KWJ5Q6rT6Ht1MA58AX8Apcqqt5r2qhrgAXQC3CZ6i1+KMd9TRu3MvA3aH/fFPnBodb6oe6HM8+lYHrGdRXW8M9bMZtPXUji69lmf5Cmamq7quNLFZXD9Rq7v0Bpc1o/tp0fisAAAAASUVORK5CYII=)](https://github.com/marketplace/actions/my-broken-link-checker) [![license](https://img.shields.io/github/license/ruzickap/action-my-broken-link-checker.svg)](https://github.com/ruzickap/action-my-broken-link-checker/blob/master/LICENSE) [![release](https://img.shields.io/github/release/ruzickap/action-my-broken-link-checker.svg)](https://github.com/ruzickap/action-my-broken-link-checker/releases/latest) [![GitHub release date](https://img.shields.io/github/release-date/ruzickap/action-my-broken-link-checker.svg)](https://github.com/ruzickap/action-my-broken-link-checker/releases) ![GitHub Actions status](https://github.com/ruzickap/action-my-broken-link-checker/workflows/docker-image/badge.svg) [![Docker Hub Build Status](https://img.shields.io/docker/cloud/build/peru/my-broken-link-checker.svg)](https://hub.docker.com/r/peru/my-broken-link-checker) This is a GitHub Action to check broken link in your static files or web pages. The [muffet](https://github.com/raviqqe/muffet) is used for URL checking task. See the basic GitHub Action example to run periodic checks (weekly) against [google.com](https://google.com): ```yaml on: schedule: - cron: '0 0 * * 0' name: Check markdown links jobs: my-broken-link-checker: name: Check broken links runs-on: ubuntu-18.04 steps: - name: Check uses: ruzickap/action-my-broken-link-checker@v1 with: url: https://www.google.com cmd_params: "--one-page-only" # Check just one page ``` This deploy action can be combined with [Static Site Generators](https://www.staticgen.com/) (Hugo, MkDocs, Gatsby, GitBook, mdBook, etc.). The following examples expects to have the web page stored in `./build` directory. There is a [caddy](https://caddyserver.com/) web server started during the tests which is using the hostname from the `URL` parameter and serving the web pages (see the details in [entrypoint.sh](./entrypoint.sh)). ```yaml - name: Check uses: ruzickap/action-my-broken-link-checker@v1 with: url: https://www.example.com/test123 pages_path: ./build/ cmd_params: --buffer-size=8192 --concurrency=10 --skip-tls-verification --limit-redirections=5 --timeout=20 # muffet parameters run_timeout: 600 # maximum amount of time to run muffet (default is set to 300 seconds) ``` Do you want to skip the docker build step? OK, the script mode is also available: ```yaml - name: Check env: INPUT_URL: https://www.example.com/test123 INPUT_PAGES_PATH: ./build/ INPUT_CMD_PARAMS: --buffer-size=8192 --concurrency=10 --skip-tls-verification # --skip-tls-verification is mandatory parameter when using https and "PAGES_PATH" run: wget -qO- https://raw.githubusercontent.com/ruzickap/action-my-broken-link-checker/v1/entrypoint.sh | bash ``` ## Parameters Environment variables used by `./entrypoint.sh` script. | Variable | Default | Description | | ------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `INPUT_CMD_PARAMS` | `--buffer-size=8192 --concurrency=10` | Command line parameters for URL checker [muffet](https://github.com/raviqqe/muffet) - details [here](https://github.com/raviqqe/muffet/blob/master/arguments.go#L16-L34) | | `INPUT_DEBUG` | false | Enable debug mode for the `./entrypoint.sh` script (`set -x`) | | `INPUT_PAGES_PATH` | | Relative path to the directory with local web pages | | `INPUT_RUN_TIMEOUT` | 300 | Maximum number of seconds that URL checker can be running | | `INPUT_URL` | (**Mandatory / Required**) | URL which will be checked | ## Full example GitHub Action example: ```yaml name: Checks on: push: branches: - master jobs: build-deploy: runs-on: ubuntu-18.04 steps: - name: Create web page run: | mkdir -v public cat > public/index.html << EOF My page which will be stored on my-testing-domain.com domain Links: EOF - name: Check links using script env: INPUT_URL: https://my-testing-domain.com INPUT_PAGES_PATH: ./public/ INPUT_CMD_PARAMS: "--skip-tls-verification --verbose" INPUT_RUN_TIMEOUT: 100 INPUT_DEBUG: true run: wget -qO- https://raw.githubusercontent.com/ruzickap/action-my-broken-link-checker/v1/entrypoint.sh | bash - name: Check links using container uses: ruzickap/action-my-broken-link-checker@v1 with: url: https://my-testing-domain.com pages_path: ./public/ cmd_params: "--skip-tls-verification --verbose" run_timeout: 10 debug: true ``` ## Best practices Let's try to automate the creating the web pages as much as possible. The ideal situation require the repository naming convention, where the name of the GitHub repository should match the URL where it will be hosted. ### GitHub Pages with custom domain The mandatory part is the repository name `awsug.cz` which is the same as the domain: * Repository name: [awsugcz/awsug.cz](https://github.com/awsugcz/awsug.cz) \-> Web pages: [https://awsug.cz](https://awsug.cz) The web pages will be stored as GitHub Pages on it's [own domain](https://help.github.com/en/github/working-with-github-pages/configuring-a-custom-domain-for-your-github-pages-site). The GH Action file may looks like: ```yaml name: hugo-build on: pull_request: types: [opened, synchronize] push: jobs: hugo-build: runs-on: ubuntu-18.04 steps: - uses: actions/checkout@v2 - name: Checkout submodules shell: bash run: | auth_header="$(git config --local --get http.https://github.com/.extraheader)" git submodule sync --recursive git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1 - name: Setup Hugo uses: peaceiris/actions-hugo@v2.3.2 with: hugo-version: '0.62.0' - name: Build run: | hugo --gc cp LICENSE README.md public/ echo "${{ github.event.repository.name }}" > public/CNAME - name: Check broken links env: INPUT_URL: https://${{ github.event.repository.name }} INPUT_PAGES_PATH: public INPUT_CMD_PARAMS: --verbose --buffer-size=8192 --concurrency=10 --skip-tls-verification --exclude=linkedin.com run: | wget -qO- https://raw.githubusercontent.com/ruzickap/action-my-broken-link-checker/v1/entrypoint.sh | bash - name: Deploy uses: peaceiris/actions-gh-pages@v2.8.0 if: github.event_name == 'push' && github.ref == 'refs/heads/master' env: ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }} PUBLISH_BRANCH: gh-pages PUBLISH_DIR: public with: forceOrphan: true ``` The example is using [Hugo](https://gohugo.io/). ### GitHub Pages with [github.io](https://github.io) domain The mandatory part is the repository name `k8s-harbor` which is the directory part at the and of `ruzickap.github.io`: * Repository name: [ruzickap/k8s-harbor](https://github.com/ruzickap/k8s-harbor) \-> Web pages: [https://ruzickap.github.io/k8s-harbor](https://ruzickap.github.io/k8s-harbor) In the example the web pages will be using GitHub's domain [github.io](https://github.io). ```yaml name: vuepress-build-check-deploy on: pull_request: types: [opened, synchronize] paths: - .github/workflows/vuepress-build-check-deploy.yml - docs/** - package.json - package-lock.json push: paths: - .github/workflows/vuepress-build-check-deploy.yml - docs/** - package.json - package-lock.json jobs: vuepress-build-check-deploy: runs-on: ubuntu-18.04 steps: - uses: actions/checkout@v2 - name: Install Node.js 12 uses: actions/setup-node@v1 with: node-version: 12.x - name: Install VuePress and build the document run: | npm install npm run build cp LICENSE docs/.vuepress/dist sed -e "s@(part-@(https://github.com/${GITHUB_REPOSITORY}/tree/master/docs/part-@" -e 's@.\/.vuepress\/public\/@./@' docs/README.md > docs/.vuepress/dist/README.md - name: Check broken links env: INPUT_URL: https://${{ github.event.repository.owner.name }}.github.io/${{ github.event.repository.name }} INPUT_PAGES_PATH: . INPUT_CMD_PARAMS: --buffer-size=8192 --concurrency=10 --skip-tls-verification run: | ln -s docs/.vuepress/dist ${{ github.event.repository.name }} wget -qO- https://raw.githubusercontent.com/ruzickap/action-my-broken-link-checker/v1/entrypoint.sh | bash - name: Deploy uses: peaceiris/actions-gh-pages@v2.8.0 if: github.event_name == 'push' && github.ref == 'refs/heads/master' env: ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }} PUBLISH_BRANCH: gh-pages PUBLISH_DIR: ./docs/.vuepress/dist with: forceOrphan: true ``` In this case I'm using [VuePress](https://vuepress.vuejs.org/) to create my page. --- Both examples can be used as a **generic template**, and you do not need to change them for your projects. ## Running locally It's possible to use the checking script locally. It will install [caddy](https://caddyserver.com/) and [muffet](https://github.com/raviqqe/muffet) binaries if they are not already installed on your system. ```bash export INPUT_URL="https://google.com" export INPUT_CMD_PARAMS="--ignore-fragments --one-page-only --concurrency=10 --verbose" ./entrypoint.sh ``` Output: ```text *** INFO: [2019-12-30 14:53:54] Start checking: "https://google.com" https://www.google.com/ 200 http://www.google.cz/history/optout?hl=cs 200 http://www.google.cz/intl/cs/services/ 200 https://accounts.google.com/ServiceLogin?hl=cs&passive=true&continue=https://www.google.com/ 200 https://drive.google.com/?tab=wo 200 https://mail.google.com/mail/?tab=wm 200 https://maps.google.cz/maps?hl=cs&tab=wl 200 https://news.google.cz/nwshp?hl=cs&tab=wn 200 https://play.google.com/?hl=cs&tab=w8 200 https://www.google.com/advanced_search?hl=cs&authuser=0 200 https://www.google.com/images/branding/googlelogo/1x/googlelogo_white_background_color_272x92dp.png 200 https://www.google.com/intl/cs/about.html 200 https://www.google.com/intl/cs/ads/ 200 https://www.google.com/intl/cs/policies/privacy/ 200 https://www.google.com/intl/cs/policies/terms/ 200 https://www.google.com/language_tools?hl=cs&authuser=0 200 https://www.google.com/preferences?hl=cs 200 https://www.google.com/setprefdomain?prefdom=CZ&prev=https://www.google.cz/&sig=K_WmKyDZc24PJiXFyTjsUeLLrG-P4%3D 200 https://www.google.com/textinputassistant/tia.png 200 https://www.google.cz/imghp?hl=cs&tab=wi 200 https://www.google.cz/intl/cs/about/products?tab=wh 200 https://www.youtube.com/?gl=CZ&tab=w1 *** INFO: [2019-12-30 14:53:55] Checks completed... ``` You can also use the advantage of the container to run the checks locally without touching your system: ```bash export INPUT_URL="https://google.com" export INPUT_CMD_PARAMS="--ignore-fragments --one-page-only --concurrency=10 --verbose" docker run --rm -t -e INPUT_URL -e INPUT_CMD_PARAMS peru/my-broken-link-checker ``` Another example when checking the the web page locally stored on your disk. In this case I'm using the web page created in the `./tests/` directory from this git repository: ```bash export INPUT_URL="https://my-testing-domain.com" export INPUT_PAGES_PATH="${PWD}/tests/" export INPUT_CMD_PARAMS="--skip-tls-verification --verbose" ./entrypoint.sh ``` Output: ```text *** INFO: Using path "/home/pruzicka/git/action-my-broken-link-checker/tests/" as domain "my-testing-domain.com" with URI "https://my-testing-domain.com" *** INFO: [2019-12-30 14:54:22] Start checking: "https://my-testing-domain.com" https://my-testing-domain.com/ 200 https://my-testing-domain.com 200 https://my-testing-domain.com/run_tests.sh 200 https://my-testing-domain.com:443 200 https://my-testing-domain.com:443/run_tests.sh https://my-testing-domain.com:443/ 200 https://my-testing-domain.com 200 https://my-testing-domain.com/run_tests.sh 200 https://my-testing-domain.com:443 200 https://my-testing-domain.com:443/run_tests.sh *** INFO: [2019-12-30 14:54:22] Checks completed... ``` The same example as above, but in this case I'm using the container: ```bash export INPUT_URL="https://my-testing-domain.com" export INPUT_PAGES_PATH="${PWD}/tests/" export INPUT_CMD_PARAMS="--skip-tls-verification --verbose" docker run --rm -t -e INPUT_URL -e INPUT_CMD_PARAMS -e INPUT_PAGES_PATH -v "$INPUT_PAGES_PATH:$INPUT_PAGES_PATH" peru/my-broken-link-checker ``` ## Examples Some other examples of building and checking web pages using [Static Site Generators](https://www.staticgen.com/) and GitHub Actions can be found here: [https://github.com/peaceiris/actions-gh-pages/](https://github.com/peaceiris/actions-gh-pages/) The following links contains real examples of My Broken Link Checker: * Go to "Actions -> check-broken-links" in this repository * Static page generated by [Hugo](https://gohugo.io/) with checked links: [example](https://github.com/ruzickap/xvx.cz/blob/e30eca99a13821b6fcf322ef636fd03f5d5ce989/.github/workflows/hugo-build.yml#L34-L40) * Static page generated by [VuePress](https://vuepress.vuejs.org/) with checked links: [example](https://github.com/ruzickap/k8s-harbor/blob/7973e8c2df395999e38271ba863e307a5da07f49/.github/workflows/vuepress-build-check-deploy.yml#L93-L100) ================================================ FILE: src/actions/netlify-build.md ================================================ --- path: '/netlify-build' title: 'Netlify: Build' github_url: 'https://github.com/netlify/actions' author: 'netlify' tags: ['netlify', 'build'] subtitle: 'Trigger a build on Netlify, if there is no site for this repo it can automagically set up one with the specified base directory, command, and publish directory.' --- ## Secrets - `GITHUB_TOKEN` - _Required_ GitHub token provided by actions to validate requests - `NETLIFY_SITE_ID` - _Optional_ API site ID of the site you wanna work on [Obtain it from the UI](https://www.netlify.com/docs/cli/#link-with-an-environment-variable) ## Environment Variables - `NETLIFY_BASE` - _Optional_ Directory to change to before starting build - `NETLIFY_CMD` - _Optional_ Build command to build site - `NETLIFY_DIR` - _Optional_ The directory to publish (relative to root of your repo) ## Examples Trigger a build to a specific site in Netlify ```hcl workflow "Publish on Netlify" { on = "push" resolves = ["Publish"] } action "Publish" { uses = "netlify/actions/build@master" secrets = ["GITHUB_TOKEN", "NETLIFY_SITE_ID"] } ``` Trigger a build on Netlify, if there's no site for this repo it will automagically set up one with the specified base, command, and publish directory. ```hcl workflow "Publish on Netlify" { on = "push" resolves = ["Publish"] } action "Publish" { uses = "netlify/actions/build@master" secrets = ["GITHUB_TOKEN"] env = { NETLIFY_BASE = "site" NETLIFY_CMD = "npm build" NETLIFY_DIR = "site/_build" } } ``` ================================================ FILE: src/actions/netlify-cli.md ================================================ --- path: '/netlify-cli' title: 'Netlify: CLI' github_url: 'https://github.com/netlify/actions' author: 'netlify' tags: ['netlify', 'cli'] subtitle: 'This Action enables arbitrary actions with the Netlify CLI' --- ## Secrets - `NETLIFY_AUTH_TOKEN` - _Required_ The token to use for authentication. [Obtain one with the UI](https://www.netlify.com/docs/cli/#obtain-a-token-in-the-netlify-ui) - `NETLIFY_SITE_ID` - _Optional_ API site ID of the site you wanna work on [Obtain it from the UI](https://www.netlify.com/docs/cli/#link-with-an-environment-variable) ## Example ```hcl workflow "Publish on Netlify" { on = "push" resolves = ["Publish"] } action "Publish" { uses = "netlify/actions/cli@master" args = "deploy --dir=site --functions=functions" secrets = ["NETLIFY_AUTH_TOKEN", "NETLIFY_SITE_ID"] } ``` ================================================ FILE: src/actions/netlify-diff-includes.md ================================================ --- path: '/netlify-diff-includes' title: 'Netlify: Diff Includes Filter' github_url: 'https://github.com/netlify/actions' author: 'netlify' tags: ['netlify'] subtitle: ' This action includes a filter to stop workflows unless certain files or directories are changed in a range of commits.' --- ## Examples ```hcl workflow "Publish docs if changed" { on = "push" resolves = ["Publish"] } action "Check changes in docs" { uses = "netlify/actions/diff-includes@master" // this can be one or many files/directories args = "docs" } // This will only be run if there are changes in docs directory in the last set // of commits pushed action "Publish" { needs = "Checks changes in docs" uses = "netlify/actions/build@master" // see https://github.com/netlify/actions/tree/master/build for details secrets = ["GITHUB_TOKEN", "NETLIFY_SITE_ID"] env = { // this should match previouse action `args` until known issue is resolved BUILD_DIR = "docs" } } ``` ================================================ FILE: src/actions/nexmo-sms.md ================================================ --- path: '/nexmo-sms' title: 'Nexmo SMS' github_url: 'https://github.com/nexmo-community/nexmo-sms-action' author: 'nexmo-community' tags: ['sms', 'nexmo'] subtitle: 'Send an SMS from GitHub Actions using Nexmo. The passed in args represent the contents of the message.' --- ## Usage The `args` represent the recipient and the contents of the message. For example: ```workflow workflow "Send SMS On Push" { on = "push" resolves = ["notification"] } action "notification" { uses = "nexmo-community/nexmo-sms-action@master" secrets = [ "NEXMO_API_KEY", "NEXMO_API_SECRET", "NEXMO_NUMBER" ] args = "15551234567 New pull on $GITHUB_REPOSITORY from $GITHUB_ACTOR." } ``` will send `New pull on $GITHUB_REPOSITORY from $GITHUB_ACTOR` to `15551234567`. If you don't want to expose your recipient number, you can use secrets. For example, a new secret called `DEVOPS_NUMBER` could be used inside of `args` as follows: ```workflow workflow "Send SMS On Push" { on = "push" resolves = ["notification"] } action "notification" { uses = "nexmo-community/nexmo-sms-action@master" secrets = [ "NEXMO_API_KEY", "NEXMO_API_SECRET", "NEXMO_NUMBER", "DEVOPS_NUMBER" ] args = "$DEVOPS_NUMBER New pull on $GITHUB_REPOSITORY from $GITHUB_ACTOR." } ``` This allows for you to reuse this action to send messages to various recipients. ## Secrets This action uses the following required secrets: - `NEXMO_API_KEY` - Your Nexmo API Key. - `NEXMO_API_SECRET` - Your Nexmo API Secret. - `NEXMO_NUMBER` - A number on your Nexmo account without any spaces or symbols. Example: 15551231234 ## Event Information GitHub stores the event information in the json file at `$GITHUB_EVENT_PATH`. You can use [jq] to parse this file and send its contents in the SMS: ```sh jq .issue.html_url $GITHUB_EVENT_PATH --raw-output ``` Here's an example of sending an SMS any time an issue is created with the urgent label: ```workflow workflow "Send SMS On Urgent Issue" { resolves = [ "Send Urgent Issue Message", ] on = "issues" } action "Has Urgent Label" { uses = "actions/bin/filter@8738e95" args = "label urgent" } action "Label Being Added" { uses = "actions/bin/filter@8738e95" args = "action labeled" } action "Send Urgent Issue Message" { needs = ["Label Being Added", "Has Urgent Label"] secrets = [ "NEXMO_API_KEY", "NEXMO_API_SECRET", "NEXMO_NUMBER", "DEVOPS_NUMBER", ] args = "$DEVOPS_NUMBER This urgent issue needs your attention: `jq .issue.html_url $GITHUB_EVENT_PATH --raw-output`" uses = "nexmo-community/nexmo-sms-action@master" } ``` [github actions]: https://github.com/actions [nexmo]: https://developer.nexmo.com [jq]: https://stedolan.github.io/jq/ ================================================ FILE: src/actions/node-code-formatter.md ================================================ --- path: "/node-code-formatter" title: "node-code-formatter" github_url: "https://github.com/MarvinJWendt/run-node-formatter" author: "MarvinJWendt" subtitle: "Automatically formats your code with your preferred code formatter!" tags: ["formatter", "format", "linter", "node", "style", "standard", "prettier"] --- # Node Code Formatter [![GitHub Action](https://img.shields.io/badge/-GitHub_Action-black?logo=github&style=flat-square)](https://github.com/marketplace/actions/node-code-formatter) [![GitHub license](https://img.shields.io/github/license/MarvinJWendt/run-node-formatter?style=flat-square)](https://github.com/MarvinJWendt/run-node-formatter/blob/master/LICENSE) [![GitHub issues](https://img.shields.io/github/issues/MarvinJWendt/run-node-formatter)](https://github.com/MarvinJWendt/run-node-formatter/issues) [![GitHub stars](https://img.shields.io/github/stars/MarvinJWendt/run-node-formatter?style=flat-square)](https://github.com/MarvinJWendt/run-node-formatter/stargazers) > Automatically formats your code! ## Automatically format pull requests _Never tell your users to format their code, as we do it on the fly!_ ![image](https://user-images.githubusercontent.com/31022056/64829627-6457d300-d5cd-11e9-9bc0-6a35d095ec64.png) ## Usage :pencil2: 1. Create a `formatter.yml` file in `.github/workflows/` 2. Paste this code into the file: ```yml on: push name: Node Code Formatter jobs: lint: name: Node Code Formatter runs-on: ubuntu-latest steps: - name: Node Code Formatter uses: MarvinJWendt/run-node-formatter@1.2.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ``` 3. Commit the file :twisted_rightwards_arrows: ## Setup formatter scripts :clipboard: Simply put your code formatter into a script named `format` or `lint` in your `package.json` (Yarn only supports a `lint` script at the moment). **Make sure that your code formatter is a dependency of your module!** ### StandardJS ```json ... "scripts": { "format": "standard --fix" } ``` ### Prettier ```json ... "scripts": { "format": "prettier" } ``` ================================================ FILE: src/actions/notify-slack-action.md ================================================ --- path: "/notify-slack-action" title: "notify-slack-action" github_url: "https://github.com/ravsamhq/notify-slack-action" author: "ravsamhq" subtitle: "Send Github Actions workflow status notifications to Slack regarding failures, warnings, or even success." tags: ["github-actions","github-action","slack-bot","slack-actions","workflow-status-notifications","slack","workflow","notifications"] --- ![Test](https://github.com/ravsamhq/notify-slack-action/workflows/Test/badge.svg) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) # Notify Slack Action Send Github Actions workflow status notifications to Slack regarding failures, warnings or even success. ### Example workflow ```yaml steps: - uses: ravsamhq/notify-slack-action@master if: always() with: status: ${{ job.status }} notify_when: 'failure' # default is 'success,failure,warnings' env: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} # required ``` Made in Python • By [Ravgeet Dhillon](https://github.com/ravgeetdhillon) @ [RavSam Web Solutions](https://www.ravsam.in). ================================================ FILE: src/actions/npm-audit-fix.md ================================================ --- path: '/npm-audit-fix' title: 'npm Audit Fix' github_url: 'https://github.com/JasonEtco/npm-audit-fix-action' author: 'JasonEtco' tags: ['npm', 'pull-request'] subtitle: 'Work in progress GitHub Action that opens a pull request following an npm audit fix --forcey.' ---

Screenshot of the Action creating a new pull request

### Still todo - Figure out how to best test Actions - Smarter logic around when `--force` should be used (if at all) - It runs `npm audit`, checks the sum vulnerabilities, then `npm audit fix` needed - could that be optimized to one command? ================================================ FILE: src/actions/npm-cli.md ================================================ --- path: '/npm-cli' title: 'NPM Cli' github_url: 'https://github.com/actions/npm' author: 'GitHub' tags: ['cli'] subtitle: 'This Action for npm enables arbitrary actions with the npm command-line client, including testing packages and publishing to a registry.' --- ## Usage An example workflow to build, test, and publish an npm package to the default public registry follows: ```hcl workflow "Build, Test, and Publish" { on = "push" resolves = ["Publish"] } action "Build" { uses = "actions/npm@master" args = "install" } action "Test" { needs = "Build" uses = "actions/npm@master" args = "test" } # Filter for a new tag action "Tag" { needs = "Test" uses = "actions/bin/filter@master" args = "tag" } action "Publish" { needs = "Tag" uses = "actions/npm@master" args = "publish --access public" secrets = ["NPM_AUTH_TOKEN"] } ``` ### Secrets - `NPM_AUTH_TOKEN` - **Optional**. The token to use for authentication with the npm registry. Required for `npm publish` ([more info](https://docs.npmjs.com/getting-started/working_with_tokens)) ### Environment variables - `NPM_REGISTRY_URL` - **Optional**. To specify a registry to authenticate with. Defaults to `registry.npmjs.org` - `NPM_CONFIG_USERCONFIG` - **Optional**. To specify a non-default per-user configuration file. Defaults to `$HOME/.npmrc` ([more info](https://docs.npmjs.com/misc/config#npmrc-files)) #### Example To authenticate with, and publish to, a registry other than `registry.npmjs.org`: ```hcl action "Publish" { uses = "actions/npm@master" args = "publish --access public" env = { NPM_REGISTRY_URL = "someOtherRegistry.someDomain.net" } secrets = ["NPM_AUTH_TOKEN"] } ``` ## License The Dockerfile and associated scripts and documentation in this project are released under the [MIT License](LICENSE). Container images built with this project include third party materials. See [THIRD_PARTY_NOTICE.md](THIRD_PARTY_NOTICE.md) for details. ================================================ FILE: src/actions/okteto.md ================================================ --- path: '/okteto' title: 'Okteto Deploy' github_url: 'https://github.com/okteto/actions' author: 'Luis Vilca' twitter: '@ferluisxd' tags: ['okteto','cd','ci','devops','docker','k8s'] subtitle: 'This actions is to automate the deploy of okteto (similar to okteto push from their cli' --- This repository contains a bunch of actions to behave like the okteto CLI, you can find more info in their repository Learn more about okteto [here](https://okteto.com/docs/getting-started/index.html) ## Usage Below you'll find my script to deploy your app to the cloud (similar to okteto push) ```name: CD on: push: branches: - master jobs: devflow: runs-on: ubuntu-latest steps: - uses: okteto/actions/login@master with: token: ${{ secrets.OKTETO_TOKEN }} - name: "Create devlopment environments namespace" uses: okteto/actions/namespace@master with: name: your-okteto-username - name: "Deploy application" uses: okteto/actions/apply@master with: namespace: your-okteto-username manifest: k8s.yaml - name: "Push changes" uses: okteto/actions/namespace@master with: namespace: your-okteto-username name: your-cloud-application-name deploy: "true" ``` ================================================ FILE: src/actions/pandoc.md ================================================ --- path: "/pandoc" title: "pandoc" github_url: "https://github.com/maxheld83/pandoc" author: "maxheld83" subtitle: "GitHub action to run pandoc" tags: ["github-actions","continuous-delivery","pandoc","latex","markdown","html"] --- # GitHub Action to Convert Documents via Pandoc [![Actions Status](https://wdp9fww0r9.execute-api.us-west-2.amazonaws.com/production/badge/maxheld83/pandoc)](https://github.com/maxheld83/pandoc/actions) [![GitHubActions](https://img.shields.io/badge/as%20seen%20on%20-GitHubActions-blue.svg)](https://github-actions.netlify.com/pandoc) This action lets you use [pandoc](https://pandoc.org/), the **swiss army knife of document conversion**. It is based on the [`pandoc/latex`](https://hub.docker.com/r/pandoc/latex/) docker image and thus ships with LaTeX, so you can also convert right through to PDF. The action currently uses pandoc 2.6 and will be upgrade periodically. ## Secrets None. ## Environment Variables - `OUT_DIR` (optional) a path relative from `workspace/github` (~ your repository root) *without* trailing slash. It's often useful to have pandoc output to a separate directory, for example for easier deployment. You can *create* such a directory using the `OUT_DIR` environment variable. If you've set it, the directory will be `mkdir`ed. Remember to point the output argument of your pandoc call in the `args` section to this new directory. ## Arguments All arguments get appended to the [`pandoc` command](https://pandoc.org/MANUAL.html). ## Example Usage This is the action block used to render the website for this action. ``` action "Convert" { uses = "maxheld83/pandoc@v0.1.0" env = { OUT_DIR = "public" } args = [ "--standalone", "--output=public/index.html", "README.md" ] } ``` ================================================ FILE: src/actions/php-code-fixer.md ================================================ --- path: '/php-code-fixer' title: 'PHP Code Fixer' github_url: 'https://github.com/OskarStark/php-cs-fixer-ga' author: 'OskarStark' tags: [] subtitle: 'Github Action for PHP-CS-Fixer.' --- ## Usage You can use it as a Github Action like this: _.github/main.workflow_ ``` workflow "Main" { on = "push" resolves = ["PHP-CS-Fixer"] } action "PHP-CS-Fixer" { uses = "docker://oskarstark/php-cs-fixer-ga" secrets = ["GITHUB_TOKEN"] } ``` _to use a custom config for example, --diff and --dry-run option:_ ```diff workflow "Main" { on = "push" resolves = ["PHP-CS-Fixer"] } action "PHP-CS-Fixer" { uses = "docker://oskarstark/php-cs-fixer-ga" secrets = ["GITHUB_TOKEN"] + args = "--config=.project.php_cs --diff --dry-run" } ``` **You can copy/paste the .github folder (under examples/) to your project and thats all!** ## Docker A Docker-Image is built automatically and located here: https://cloud.docker.com/u/oskarstark/repository/docker/oskarstark/php-cs-fixer-ga You can run it in any given directory like this: `docker run --rm -it -w=/app -v ${PWD}:/app oskarstark/php-cs-fixer-ga:latest` ## A picture is worth a thousand words You can find a working and not working PR here: https://github.com/OskarStark/test-php-cs-fixer-ga/pulls ================================================ FILE: src/actions/php-stan.md ================================================ --- path: '/php-stan' title: 'PHPStan' github_url: 'https://github.com/OskarStark/phpstan-ga' author: 'OskarStark' tags: [] subtitle: 'PHPStan Static code analyzer Action.' --- ## Usage You can use it as a Github Action like this: _.github/main.workflow_ ``` workflow "Main" { on = "push" resolves = ["PHPStan"] } action "PHPStan" { uses = "docker://oskarstark/phpstan-ga" secrets = ["GITHUB_TOKEN"] args = "analyse src/" } ``` _to use a specific level:_ ```diff workflow "Main" { on = "push" resolves = ["PHPStan"] } action "PHPStan" { uses = "docker://oskarstark/phpstan-ga" secrets = ["GITHUB_TOKEN"] + args = "analyse src/ --level=4" } ``` **You can copy/paste the .github folder (under examples/) to your project and thats all!** ## Docker A Docker-Image is built automatically and located here: https://cloud.docker.com/u/oskarstark/repository/docker/oskarstark/phpstan-ga You can run it in any given directory like this: `docker run --rm -it -w=/app -v ${PWD}:/app oskarstark/phpstan-ga:latest analyse src/` ================================================ FILE: src/actions/phpqa.md ================================================ --- path: '/phpqa' title: 'PHPQA toolsuite' github_url: 'https://github.com/mickaelandrieu/phpqa-ga' author: 'mickaelandrieu' tags: [] subtitle: 'PHPQA toolsuite action.' --- ## Usage You can use it as a Github Action like this: _.github/main.workflow_ ``` workflow "Main" { on = "push" resolves = ["PHPQA"] } action "PHPQA" { uses = "docker://mickaelandrieu/phpqa-ga" secrets = ["GITHUB_TOKEN"] args = "--report --output=cli" } ``` **You can copy/paste the .github folder (under examples/) to your project and thats all!** ## Docker A Docker-Image is built automatically and located here: https://cloud.docker.com/u/mickaelandrieu/repository/docker/mickaelandrieu/phpqa-ga You can run it in any given directory like this: `docker run --rm -it -w=/app -v ${PWD}:/app mickaelandrieu/phpqa-ga:latest tools` ================================================ FILE: src/actions/powershell-formatter.md ================================================ --- path: '/powershell-formatter' title: 'Powershell formatter' github_url: 'https://github.com/bltavares/actions' author: 'bltavares' tags: ['powershell', 'formatter', 'autofixer'] subtitle: 'This actions will check the formating of the Dockerfiles in the project, using Powershell-Beautiffier.' --- ## Validations on Push This actions will check the formating of the Dockerfiles in the project, using [Powershell-Beautiffier](https://github.com/DTW-DanWard/PowerShell-Beautifier) Action name was changed just to provide a shorter version ## Fixes on Pull Request review This action provides automated fixes using Pull Request review comments. If the comment starts with `fix $action_name` or `fix pwshfmt`, a new commit will be added to the branch with the automated fixes applied. **Supports**: autofix on push ## Example workflow ```hcl workflow "on push" { on = "push" resolves = ["pwshfmt"] } workflow "on review" { resolves = ["pwshfmt"] on = "pull_request_review" } action "pwshfmt" { uses = "bltavares/actions/pwshfmt@master" # Enable autofix on push # args = ["autofix"] # Used for pushing changes for `fix` comments on review secrets = ["GITHUB_TOKEN"] } ``` ================================================ FILE: src/actions/pr-status-giphy.md ================================================ --- path: "/pr-status-giphy" title: "Pull Request Status Giphy Action" github_url: "https://github.com/jzweifel/pr-status-giphy-action" author: "jzweifel" subtitle: "A GitHub Action that displays a random thumbs up or thumbs down gif from giphy when pull request checks finish. " tags: [gif,utility,fun] --- # Pull Request Status Giphy Action A GitHub Action that displays a random thumbs up or thumbs down gif from Giphy when all checks on a Pull Request complete. It will automatically clean up an existing comment before making a new one if checks are re-run. Works best when used in a workflow that runs on the `pull_request` event. ![thumbs-up-pr](https://github.com/jzweifel/pr-status-giphy-action/raw/master/media/thumbs-up-pr.gif) ![thumbs-down-pr](https://github.com/jzweifel/pr-status-giphy-action/raw/master/media/thumbs-down-pr.gif) ## Usage ``` workflow "Pull Request Status Checks" { resolves = "PR Status Giphy" on = "pull_request" } action "PR Status Giphy" { uses = "jzweifel/pr-status-giphy-action@master" secrets = ["GITHUB_TOKEN", "GIPHY_API_KEY"] } ``` ### Secrets - `GITHUB_TOKEN` - **Required**. - `GIPHY_API_KEY` - **Required**. Your secret Giphy Api Key. You can create this key [here](https://developers.giphy.com/dashboard/?create=true). ## License The Dockerfile and associated scripts and documentation in this project are released under the [MIT License](LICENSE). Container images built with this project include third party materials. See [THIRD_PARTY_NOTICE.md](THIRD_PARTY_NOTICE.md) for details. ================================================ FILE: src/actions/psake.md ================================================ --- path: '/psake-tasks' title: 'Run psake tasks' github_url: 'https://github.com/devblackops/psake-github-action' author: 'devblackops' tags: [] subtitle: 'This official psake GitHub Action allow you to run psake tasks as part of your GitHub workflow.' --- ## Actions ### Task Runs one or more psake tasks defined in a `psakeFile.ps1` in the root of the repository. The file containing your psake tasks can be overridden via environment variables. ## Success Criteria This action succeeds if the `psake` task(s) complete without error. ## Usage ```hcl action "psake test" { # Replace with the latest tag from # https://github.com/devblackops/psake-github-action/releases uses = "devblackops/psake-github-action@" # If you need to change the default psakeFile name, PSDepend requirements file, # or skip requirements installation entirely, specify here. # See Environment Variables below for details. env = { PSAKE_FILE = "./psakeFile.ps1" } # The psake task(s) to execute args = ["Test"] } ``` ## Environment Variables | Name | Default | Description | | ------------- | --------------------- | -------------------------------------------------------------- | | PSAKE_FILE | "./psakeFile.ps1" | The default psake task file to execute | | PSDEPEND_FILE | "./requirements.psd1" | The default PSDepend file to install dependencies from | | SKIP_REQS | "false" | Set to `"true"` to skip installing dependencies via `PSDepend` | ## Arguments Arguments to the `Task` action determine what `psake` tasks to execute. By default, `psake` will execute a task called `Default` that is defined in the psakeFile. Execute the `test` psake task. ```hcl action "psake test" { ... args = ["Test"] } ``` Execute the `init`, `build`, and `test` psake tasks. ```hcl action "psake test" { ... args = ["init, build, test"] } ``` ================================================ FILE: src/actions/publish-puppet-forge.md ================================================ --- path: "/action-forge-publish" title: "action-forge-publish" github_url: "https://github.com/barnumbirr/action-forge-publish" author: "Martin Simon" twitter: '@barnumbirr' subtitle: "GitHub Action to build and publish modules to Puppet Forge." tags: ['deployment', 'publish', 'Puppet', 'Forge'] --- # action-forge-publish This action allows you to upload your module to [Puppet Forge](https://forge.puppet.com/). ## Usage To use the action add the following step to your workflow file (e.g. `.github/workflows/main.yml`) ```yaml name: Build and publish to Puppet Forge on: push: tags: - v[0-9]+.[0-9]+.[0-9]+ jobs: build: runs-on: ubuntu-latest steps: - name: Get latest tag run: echo ::set-env name=RELEASE_VERSION::$(echo ${GITHUB_REF:10}) - name: Clone repository uses: actions/checkout@v1 with: ref: ${{ env.RELEASE_VERSION }} - name: Build and publish module uses: barnumbirr/action-forge-publish@v1.2.0 env: FORGE_API_KEY: ${{ secrets.FORGE_API_KEY }} REPOSITORY_URL: https://forgeapi.puppet.com/v3/releases ``` ## License: ``` Copyright 2019 Martin Simon Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ``` ================================================ FILE: src/actions/publish-wordpress-plugin.md ================================================ --- path: '/publish-wordpress-plugin' title: 'Publish WordPress plugin' github_url: 'https://github.com/lubusIN/actions' author: 'lubusIN' tags: ['wordpress'] subtitle: 'Github action to publish your WordPress plugin to wordpress.org plugin repository. Develop plugin on github and once done tag the release, sit back and relax. WordPress action will publish the release to wordpress.org SVN and create SVN tag based on the github release tag.' ---

Licence PRs

# WordPress Github action to publish your WordPress plugin to wordpress.org plugin repository. Develop plugin on github and once done tag the release, sit back and relax. WordPress action will publish the release to wordpress.org SVN and create SVN tag based on the github release tag. > _**Note**_: > > - WordPress action depends on [archive](https://github.com/lubusIN/actions/tree/master/archive) action to build the distibution archive which is published to wordpress.org SVN > - Keep all assets for plugin repository under `.wordpress-org` > - Create numeric release tag e.g. `1.0.0` as action uses same name for SVN tag folder ## Environment Variables - **WP_SLUG**: plugin slug on wordpress.org ## Secrets - **WP_USERNAME**: your wordpress.org username - **WP_PASSWORD**: your wordpress.org password ## Example Workflow ```HCL # Workflow to publish plugin release to wordpress.org workflow "Release Plugin" { on = "push" resolves = ["wordpress"] } # Filter for tag action "tag" { uses = "actions/bin/filter@master" args = "tag" } # Install Dependencies action "install" { uses = "actions/npm@e7aaefe" needs = "tag" args = "install" } # Build Plugin action "build" { uses = "actions/npm@e7aaefe" needs = ["install"] args = "run build" } # Create Release ZIP archive action "archive" { uses = "lubusIN/actions/archive@master" needs = ["build"] env = { ZIP_FILENAME = "plugin-slug" } } # Publish to wordpress.org repository action "wordpress" { uses = "lubusIN/actions/wordpress@master" needs = ["archive"] env = { WP_SLUG = "plugin-slug" } secrets = [ "WP_USERNAME", "WP_PASSWORD" ] } ``` ================================================ FILE: src/actions/pulumi.md ================================================ --- path: '/pulumi' title: 'Pulumi' github_url: 'https://github.com/pulumi/actions' author: 'pulumi' tags: ['cloud'] subtitle: 'Pulumis GitHub Actions deploy apps and infrastructure to your cloud of choice, using just your favorite language and GitHub. This includes previewing, validating, and collaborating on proposed deployments in the context of Pull Requests, and triggering deployments or promotions between different environments by merging or directly committing code.' --- ## Getting Started To get started with Pulumi's GitHub Actions, check out our documentation: [https://pulumi.io/github](https://pulumi.io/github) ## Demos and Examples To see some examples of this in action, see the following links: - [Our introductory blog post](https://blog.pulumi.com/continuous-delivery-to-any-cloud-using-github-actions-and-pulumi) - [Dockerized Ruby on Rails, in Kubernetes, with hosted Cloud SQL](https://github.com/pulumi/actions-example-gke-rails) - [Short 90 second video from GitHub Universe Keynote](https://www.youtube.com/watch?v=59SxB2uY9E0) - [Short 90 second video on GitOps and Pull Request workflows](https://www.youtube.com/watch?v=MKbDVDBuKUA) - [Longer 7 minute video exploring the ins and outs of Pulumi GitHub Actions in practice](https://www.youtube.com/watch?v=1Et2TkuxqJg) ## Cloud Providers Below are some quick tips on using Pulumi's GitHub Actions support with your cloud provider. This typically entails configuring a service principal for unattended access, storing the resulting credentials using [GitHub Secrets](https://developer.github.com/actions/creating-workflows/storing-secrets/), and consuming them using [the `secrets` attribute](https://developer.github.com/actions/creating-workflows/workflow-configuration-options/#actions-attributes) on your workflow's action. > If your cloud of choice isn't listed, that doesn't necessarily mean Pulumi doesn't support it; please see > [Pulumi's QuickStart page](https://pulumi.io/quickstart) for more complete documentation. ### Amazon Web Services (AWS) For AWS, you'll need to create or use or use an existing IAM user for your action. Please see [the Pulumi documentation page](https://pulumi.io/quickstart/aws/setup.html#environment-variables) for pointers to the relevant AWS documentation for doing this. As soon as you have an AWS user in hand, you'll set the environment variables `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` using GitHub Secrets, and then consume them in your action: ``` workflow "Update" { on = "push" resolves = [ "Pulumi Deploy (Current Stack)" ] } action "Pulumi Deploy (Current Stack)" { uses = "docker://pulumi/actions" args = [ "up" ] env = { "PULUMI_CI" = "up" } secrets = [ "PULUMI_ACCESS_TOKEN", "AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY" ] } ``` Failure to configure this correctly will lead to an error message. ### Microsoft Azure For Azure, you'll need to create or use an existing Azure Service Principal for your action. Please see [the Pulumi documentation page](https://pulumi.io/quickstart/azure/setup.html#service-principal-authentication) for pointers to the relevant Azure documentation for doing this. As soon as you have a service principal in hand, you'll set the environment variables `ARM_SUBSCRIPTION_ID`, `ARM_CLIENT_ID`, `ARM_CLIENT_SECRET`, and `ARM_TENANT_ID` using GitHub Secrets, and consume them in your action: ``` workflow "Update" { on = "push" resolves = [ "Pulumi Deploy (Current Stack)" ] } action "Pulumi Deploy (Current Stack)" { uses = "docker://pulumi/actions" args = [ "up" ] env = { "PULUMI_CI" = "up" } secrets = [ "PULUMI_ACCESS_TOKEN", "ARM_SUBSCRIPTION_ID", "ARM_CLIENT_ID", "ARM_CLIENT_SECRET", "ARM_TENANT_ID" ] } ``` Failure to configure this correctly will lead to the error message `Error building AzureRM Client: Azure CLI Authorization Profile was not found. Please ensure the Azure CLI is installed and then log-in with 'az login'`. ### Google Cloud Platform For GCP, you'll need to create or use or use an existing service account key. Please see [the Pulumi documentation page](https://pulumi.io/quickstart/gcp/setup.html) for pointers to the relevant GCP documentation for doing this. As soon as you have credentials in hand, you'll set the environment variable `GOOGLE_CREDENTIALS` to contain the credentials JSON using GitHub Secrets, and then consume it in your action: ``` workflow "Update" { on = "push" resolves = [ "Pulumi Deploy (Current Stack)" ] } action "Pulumi Deploy (Current Stack)" { uses = "docker://pulumi/actions" args = [ "up" ] env = { "PULUMI_CI" = "up" } secrets = [ "PULUMI_ACCESS_TOKEN", "GOOGLE_CREDENTIALS" ] } ``` Failure to configure this correctly will lead to an error message. ================================================ FILE: src/actions/py-lambda-action.md ================================================ --- path: "/py-lambda" title: "py-lambda" github_url: "https://github.com/mariamrf/py-lambda-action" author: "mariamrf" subtitle: "A Github Action to deploy AWS Lambda functions written in Python with their dependencies in a separate layer." tags: ["actions","aws","lambda","lambda-layer"] --- # py-lambda-action A Github Action to deploy AWS Lambda functions written in Python with their dependencies in a separate layer. For now, only works with Python 3.6. ## Use Doesn't take any arguments. Deploys everything in the repo as code to the Lambda function, and installs/zips/deploys the dependencies as a separate layer the function can then immediately use. ### Structure - Lambda code should be structured normally/as Lambda would expect it. - **Dependencies must be stored in a `requirements.txt`**. ### Environment variables Stored as secrets or env vars, doesn't matter. But also please don't put your AWS keys outside Secrets. - **AWS Credentials** That includes the `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, etc. It's used by `awscli`, so the docs for that [can be found here](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html). - `LAMBDA_LAYER_ARN` The ARN for the Lambda layer the dependencies should be pushed to **without the version** (every push is a new version). - `LAMBDA_FUNCITON_NAME` The Lambda function name. [From the AWS docs](https://docs.aws.amazon.com/cli/latest/reference/lambda/update-function-code.html), it can be any of the following: - Function name - `my-function` - Function ARN - `arn:aws:lambda:us-west-2:123456789012:function:my-function` - Partial ARN - `123456789012:function:my-function` - `BRANCH` (optional) If the action should only be executed on a certain branch (e.g. `master`). ### Example workflow ```hcl workflow "Build & deploy" { on = "push" resolves = ["py-lambda-deploy"] } action "py-lambda-deploy" { uses = "mariamrf/py-lambda-action@master" secrets = [ "AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "AWS_DEFAULT_REGION", "LAMBDA_FUNCTION_NAME", "LAMBDA_LAYER_ARN", ] env = { BRANCH = "master" } } ``` ================================================ FILE: src/actions/pypi-publish.md ================================================ --- path: "/gh-action-pypi-publish" title: "gh-action-pypi-publish" github_url: "https://github.com/pypa/gh-action-pypi-publish" author: "pypa" subtitle: "GitHub Action for publishing pre-build distribution packages to PyPI (from `dist/` dir)" tags: ["github-action","python","workflow","workflow-automation","pypi","python-packaging","twine","secrets","upload","release","release-automation","release-helper","workflows","github-actions"] --- # PyPI publish GitHub Action This action allows you to upload your [Python distribution package]( https://packaging.python.org/glossary/#term-distribution-package) to PyPI. This text suggests a minimalistic usage overview. For more detailed walkthrough check out the [PyPA guide]. ## Usage To use the action add the following step to your workflow file (e.g. `.github/workflows/main.yml`) ```yml - name: Publish a Python distribution to PyPI uses: pypa/gh-action-pypi-publish@master with: user: __token__ password: ${{ secrets.pypi_password }} ``` > **Pro tip**: instead of using branch pointers, like `master`, pin versions of Actions that you use to tagged versions or sha1 commit identifiers. This will make your workflows more secure and better reproducible, saving you from sudden and unpleasant surprises. A common use case is to upload packages only on a tagged commit, to do so add a filter to the step: ```yml if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') ``` So the full step would look like: ```yml - name: Publish package if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') uses: pypa/gh-action-pypi-publish@master with: user: __token__ password: ${{ secrets.pypi_password }} ``` The example above uses the new [API token](https://pypi.org/help/#apitoken) feature of PyPI, which is recommended to restrict the access the action has. The secret used in `${{ secrets.pypi_password }}` needs to be created on the settings page of your project on GitHub. See [Creating & using secrets]. ## Non-goals This GitHub Action [has nothing to do with _building package distributions_]. Users are responsible for preparing dists for upload by putting them into the `dist/` folder prior to running this Action. ## Advanced release management For best results, figure out what kind of workflow fits your project's specific needs. For example, you could implement a parallel workflow that pushes every commit to TestPyPI or your own index server, like `devpi`. For this, you'd need to (1) specify a custom `repository_url` value and (2) generate a unique version number for each upload so that they'd not create a conflict. The latter is possible if you use `setuptools_scm` package but you could also invent your own solution based on the distance to the latest tagged commit. You'll need to create another token for a separate host and then [save it as a GitHub repo secret][Creating & using secrets]. The action invocation in this case would look like: ```yml - name: Publish package to TestPyPI uses: pypa/gh-action-pypi-publish@master with: user: __token__ password: ${{ secrets.test_pypi_password }} repository_url: https://test.pypi.org/legacy/ ``` ## License The Dockerfile and associated scripts and documentation in this project are released under the [BSD 3-clause license](LICENSE.md). [Creating & using secrets]: https://help.github.com/en/articles/virtual-environments-for-github-actions#creating-and-using-secrets-encrypted-variables [has nothing to do with _building package distributions_]: https://github.com/pypa/gh-action-pypi-publish/issues/11#issuecomment-530480449 [PyPA guide]: https://packaging.python.org/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/ ================================================ FILE: src/actions/rebase-pr.md ================================================ --- path: '/rebase-pr' title: 'Automaticly rebase pull requests' github_url: 'https://github.com/cirrus-actions/rebase' author: 'cirrus-actions' tags: ['pull-request', 'github'] subtitle: 'GitHub action to automatically rebase pull requests.' --- [![Build Status](https://api.cirrus-ci.com/github/cirrus-actions/rebase.svg)](https://cirrus-ci.com/github/cirrus-actions/rebase) [![](https://images.microbadger.com/badges/version/cirrusactions/rebase.svg)](https://microbadger.com/images/cirrusactions/rebase) [![](https://images.microbadger.com/badges/image/cirrusactions/rebase.svg)](https://microbadger.com/images/cirrusactions/rebase) After installation simply comment `/rebase` to trigger the action: ![rebase-action](https://user-images.githubusercontent.com/989066/51547853-14a57b00-1e35-11e9-841d-33114f0f0bd5.gif) # Limitations Due to current [limitations of GitHub Actions](https://developer.github.com/actions/): > GitHub Actions is limited to private repositories and push events in public repositories during the limited public beta. _Rebase_ action currently only works on private repositories since it requires `IssueCommentEvent` event. # Installation To configure the action simply add the following lines to your `.github/main.workflow` workflow file: ``` workflow "Automatic Rebase" { on = "issue_comment" resolves = "Rebase" } action "Rebase" { uses = "docker://cirrusactions/rebase:latest" secrets = ["GITHUB_TOKEN"] } ``` ================================================ FILE: src/actions/release-archive.md ================================================ --- path: '/release-archive' title: 'Release Archive' github_url: 'https://github.com/lubusIN/actions' author: 'lubusIN' tags: ['zip'] subtitle: 'Github action to create release zip archive.' ---

Licence PRs

# Archive Currently action excludes following development/build files/folders: - node_modules - .git - .github - .wordpress-org - src - .gitkeep - .distignore - .gitignore - .editorconfig - .eslintignore - .eslintrc - .nvmrc - CHANGELOG.md - CONTRIBUTING.md - docker-compose.yml - package-lock.json - package.json - README.md - webpack.config.js - actions > _**Note**_: > > - To be used as part of workflow where archive can be used for further action like release or publish. ## Environment Variables - **ARCHIVE_FILENAME**: filename for the zip archive ## Example Workflow ```HCL # Workflow to create distribution archive workflow "Create Archive" { on = "push" resolves = ["archive"] } # Filter for tag action "tag" { uses = "actions/bin/filter@master" args = "tag" } # Install Dependencies action "install" { uses = "actions/npm@e7aaefe" needs = "tag" args = "install" } # Build action "build" { uses = "actions/npm@e7aaefe" needs = ["install"] args = "run build" } # Create Release ZIP archive action "archive" { uses = "lubusIN/actions/archive@master" needs = ["build"] env = { ZIP_FILENAME = "archive-filename" } } ``` ## Feedback / Suggestions If you have any suggestions/feature request that you would like to see, feel free to let us know in the [issues section](https://github.com/lubusIN/actions/issues) ## Credits [Ajit Bohra](https://twitter.com/ajitbohra) ## Support Us Become A Patron [LUBUS](http://lubus.in) is a web design agency based in Mumbai, India. You can pledge on [patreon](https://www.patreon.com/lubus) to support the development & maintenance of various [opensource](https://github.com/lubusIN/) stuff we are building. ## License `archive action` is open-sourced software licensed under the [MIT](LICENSE) ================================================ FILE: src/actions/release_notify.md ================================================ --- path: '/release-notify-action' title: 'Release notify' github_url: 'https://github.com/bitoiu/release-notify-action' author: 'bitoiu' tags: ['email', 'notification'] subtitle: 'This repo contains a re-usable GitHub Action that when installed sends an e-mail to a distribution list with the release note contents every time a GitHub Release is created for the repository. This Action makes use of SendGrids API to send the e-mails.' --- ## Pre-requisites To run this action you'll need: - To be part of the [Actions beta](https://github.com/features/actions). Note that during the beta, Actions will only run on private repositories. - A [**SendGrid API Key**](https://sendgrid.com/docs/ui/account-and-settings/api-keys/). _SendGrid is [free to up 100 e-mails a day](https://sendgrid.com/pricing/) so feel free to register and get your API KEY._ - **A text file hosted anywhere** with the list of e-mail recipients. _I personally use [GitHub Gists](https://gist.github.com) and get the link of the raw file._ ## Setup ### 1. Create the release workflow Add a new workflow to your `.github/main.workflow` to trigger on `release`. new-workflow ### 2. Create the Action Create an action that uses this repository `bitoiu/release-notify-action@master` or points to Docker Hub at `docker://bitoiu/release-notifiy-action` new-action ### 3. Set the SendGrid secret Using the Visual Editor create a new secret on the action named `SENDGRID_API_TOKEN`. Set the value to your [SendGrid API Key](https://sendgrid.com/docs/ui/account-and-settings/api-keys/). new-secret ### 4. Set the RECIPIENTS secret Do the same for a secret named `RECIPIENTS` that you need to set to the URI of the text file with the target recipients. The contents of the file should be a list of e-mails separated by newline, for example: ``` mona@github.com actions_are_awesome@github.com ``` If you don't know where to host this file, just go to [GitHub Gists](https://gist.github.com) and create a new textfile with the e-mails you want to target. After you save the file just click `raw` and get the URI of the file you've just created. ### 5. Commit the changes Make sure you commit all pending changes. After you've done that your `main.workflow` should look similar to this: ``` workflow "Release Notifier" { on = "release" resolves = ["Notify Releases"] } action "Notify Releases" { uses = "bitoiu/release-notify-action@master" secrets = ["SENDGRID_API_TOKEN", "RECIPIENTS"] } ``` On the visual editor it should look similar to this: ![visual editor](https://user-images.githubusercontent.com/1192590/47112717-10bef700-d24f-11e8-86a7-ef28d3d270c8.png) ### 6. Test the workflow! Create a new release for your repository and verify that the action triggers and that the e-mails were sent. Sometimes it's worth checking the spam inbox. ## Local testing The main script that does the heavy lifting is a NodeJS file. As such you can simply test it like any other node program, for example, running the following inside the `src` folder: ``` SENDGRID_API_TOKEN=XXX RECIPIENTS=ABSOLUTE_PATH_TO_TXT_FILE_WITH_RECIPIENTS GITHUB_EVENT_PATH=ABSOLUTE_PATH_TO_SAMPLE_PAYLOAD_FILE_PROVIDED node notify.js ``` If you prefer to test the container directly (which is a tiny bit slower but more reliable) you can just run something like: ``` docker build -t release . && docker run --env-file=./env release ``` Be sure to rename `env.template` to `env` and fill it with your environment variables. ================================================ FILE: src/actions/repetitive.md ================================================ --- path: '/repetitive' title: 'Repetitive Actions' github_url: 'https://github.com/repetitive/actions' author: 'repetitive' subtitle: 'Collection of repetitive GitHub Actions' tags: ['action', 'actions', 'github-actions', 'github-api', 'pull-request'] --- ## repetitive actions Collection of repetitive GitHub Actions. That can be used in other repos across GitHub: - [Create Pull Request when branch is pushed](https://github.com/repetitive/actions/tree/master/auto-pr) - [Evaluate Clojure in the issue comment](https://github.com/repetitive/actions/tree/master/clojure) ================================================ FILE: src/actions/rstats.md ================================================ --- path: "/ghactions" title: "GitHub actions for R" github_url: "https://github.com/maxheld83/ghactions" author: "maxheld83" subtitle: "Actions and accompanying rstats package to do R things via GitHub actions." tags: ["github-actions","rstats","setup","github","cicd","continous-integration","continous-delivery","devops","data-science"] --- [![Actions Status](https://wdp9fww0r9.execute-api.us-west-2.amazonaws.com/production/badge/maxheld83/ghactions)](https://github.com/maxheld83/ghactions/actions) [![lifecycle](https://img.shields.io/badge/lifecycle-experimental-orange.svg)](https://www.tidyverse.org/lifecycle/#experimental) [![CRAN status](https://www.r-pkg.org/badges/version/ghactions)](https://cran.r-project.org/package=ghactions) [![codecov](https://codecov.io/gh/maxheld83/ghactions/branch/master/graph/badge.svg)](https://codecov.io/gh/maxheld83/ghactions) [![License: MIT](https://img.shields.io/github/license/maxheld83/ghactions.svg?style=flat)](https://opensource.org/licenses/MIT) [GitHub actions](https://github.com/features/actions) are a new workflow automation feature of the popular code repository host GitHub. The product is currently in **limited beta**. This repository, **ghactions**, offers three avenues to **bring GitHub actions to the `#rstats` community**: 1. Some **actions** to run R-specific jobs on GitHub, including [arbitrary R code](http://www.maxheld.de/ghactions/articles/rscript-byod.html) or deploying to [shinyapps.io](http://shinyapps.io). These actions are maintained in this repository, but are not technically part of the accompanying ghactions R package. You can use these actions independently from the package; they are freely available on GitHub marketplace. In fact, the whole idea of GitHub actions is that people re-use such small building blocks any way they like. 2. The accompanying [**ghactions R package**](#workflows) furnishes you with some out-of-the-box **workflows** for different kinds of projects. These functions are styled after the popular [usethis](http://usethis.r-lib.org) package. They don't do much: They just set you up with some configuration files for your project, using sensible defaults. 3. Documenting experiences and evolving [**best practices**](http://www.maxheld.de/ghactions/articles/ghactions.html) for how to make the most of GitHub actions for R. ## Installation To install, run: ```r devtools::install_github("maxheld83/ghactions") ``` Because you're likely only to ever use it *once*, **you need not take on ghactions as a dependency in your projects.** ## Quick Start GitHub actions just requires a special file in a special directory at the root of your repository to work: `.github/main.workflow`. To quickly set up such a file for frequently used project kinds, run: ```r ghactions::use_ghactions(workflow = website()) ``` See the documentation for implied defaults and alternatives. Then push to GitHub and go to the actions tab in your repository. Enjoy. ================================================ FILE: src/actions/rsync.md ================================================ --- path: "/rsync" title: "rsync" github_url: "https://github.com/maxheld83/rsync" author: "maxheld83" subtitle: "GitHub action to deploy to some server via rsync and ssh" tags: ["github-actions","github-action","bash","bash-script","ssh","rsync","deployment"] --- # GitHub Action to Deploy via `rsync` over ssh [![Actions Status](https://wdp9fww0r9.execute-api.us-west-2.amazonaws.com/production/badge/maxheld83/rsync)](https://github.com/maxheld83/rsync/actions) [![GitHubActions](https://img.shields.io/badge/as%20seen%20on%20-GitHubActions-blue.svg)](https://github-actions.netlify.com/rsync) Sometimes, you might want to deploy static assets to some old school webserver over ssh. This is your action. It allows you to transfer files *from* your working directory (`/github/workspace`) *to* some server using `rsync` over ssh. Helpfully, `/github/workspace` includes a copy of your repository *source*, as well as any build artefacts left behind by previous workflow steps (= other actions you ran before). ## Disclaimer GitHub actions is still [in limited public beta](https://github.com/features/actions) and advises against [usage in production](https://developer.github.com/actions/). This action in particular requires ssh private keys (see secrets), and **may thus be vulnerable**. The ssh authentification **may need improvement** (see [issues](https://github.com/maxheld83/rsync/)). ## Secrets This action requires two secrets to authenticate over ssh: - `SSH_PRIVATE_KEY` - `SSH_PUBLIC_KEY` You get both of these from the server you deploy to. Remember to never commit these keys, but [provide them to the GitHub UI](https://developer.github.com/actions/creating-workflows/storing-secrets/) (repository settings/secrets). ## Environment Variables This action requires three environment variables used to register the target server in `$HOME/.ssh/known_hosts`. This is to make sure that the action is talking to a trusted server. **`known_hosts` verification currently fails and is overriden, see [issue 1](https://github.com/maxheld83/rsync/issues/1)**. - `HOST_NAME` (the name of the server you wish to deploy to, such as `foo.example.com`) - `HOST_IP` (the IP of the server you wish to deploy to, such as `111.111.11.111`) - `HOST_FINGERPRINT` (the fingerprint of the server you wish to deploy to, can have different formats) The `HOST_NAME` is *also* used in the below required arguments. ## Required Arguments `rsync` requires: - `SRC`: source directory, relative path *from* `/github/workspace` - `[USER@]HOST::DEST`: target user (optional), target server, and directory from root *on* that target server. Remember you can reuse the environment variable `$HOST_NAME`. For action `rsync` options, see `entrypoint.sh` in the source. For more options and documentation on `rsync`, see [https://rsync.samba.org](https://rsync.samba.org). ## Example Usage ``` action "Deploy with rsync" { uses = "maxheld83/rsync@v0.1.1" needs = "Write sha" secrets = [ "SSH_PRIVATE_KEY", "SSH_PUBLIC_KEY" ] env = { HOST_NAME = "foo.example.com" HOST_IP = "111.111.11.111" HOST_FINGERPRINT = "ecdsa-sha2-nistp256 AAAA..." } args = [ "$GITHUB_WORKSPACE/index.html", "alice@$HOST_NAME:path/to/destination" ] } ``` ================================================ FILE: src/actions/ruby-gems.md ================================================ --- path: '/ruby-gem' title: 'Ruby Gems' github_url: 'https://github.com/scarhand/actions-ruby' author: 'scarhand' subtitle: 'This Action for rubygems enables arbitrary actions with the gem command-line client, including publishing to a registry.' --- ## Usage An example workflow to build and publish a gem to the default public registry follows: ```hcl workflow "Build, Test, and Publish" { on = "push" resolves = ["Publish"] } action "Build" { uses = "scarhand/actions-ruby@master" args = "build *.gemspec" } # Filter for a new tag action "Tag" { needs = "Build" uses = "actions/bin/filter@master" args = "tag v*" } action "Publish" { needs = "Tag" uses = "scarhand/actions-ruby@master" args = "push *.gem" secrets = ["RUBYGEMS_AUTH_TOKEN"] } ``` ### Secrets - `RUBYGEMS_AUTH_TOKEN` - **Optional**. The token to use for authentication with the rubygems repository. Required for `gem push`. ### Environment variables - `RUBYGEMS_HOST` - **Optional**. To specify a repository to authenticate with. Defaults to `https://rubygems.org` [more info](https://guides.rubygems.org/command-reference/#gem-environment). #### Example To authenticate with, and publish to, a registry other than `https://rubygems.org`: ```hcl action "Publish" { uses = "scarhand/actions-ruby@master" args = "push *.gem" env = { GEM_REPOSITORY_URL = "https://someOtherRepository.someDomain.net" } secrets = ["RUBYGEMS_AUTH_TOKEN"] } ``` ================================================ FILE: src/actions/ruby-linter.md ================================================ --- path: '/ruby-linter' title: 'Ruby linter and formatter' github_url: 'https://github.com/bltavares/actions' author: 'bltavares' tags: ['ruby', 'lint', 'formatter', 'autofixer'] subtitle: 'This action will check the formating of the Dockerfiles in the project, using rubocop.' --- ## Validations on Push This actions will check the formating of the Dockerfiles in the project, using [rubocop](https://github.com/rubocop-hq/rubocop) ## Fixes on Pull Request review This action provides automated fixes using Pull Request review comments. If the comment starts with `fix $action_name` or `fix rubocop`, a new commit will be added to the branch with the automated fixes applied. **Supports**: autofix on push ## Example workflow ```hcl workflow "on push" { on = "push" resolves = ["rubocop"] } # Used for fix on review workflow "on review" { resolves = ["rubocop"] on = "pull_request_review" } action "rubocop" { uses = "bltavares/actions/rubocop@master" # Enable autofix on push # args = ["autofix"] # Used for pushing changes for `fix` comments on review secrets = ["GITHUB_TOKEN"] } ``` ================================================ FILE: src/actions/run-github-actions-locally.md ================================================ --- path: '/run-github-actions-locally' title: 'Github actions locally' github_url: 'https://github.com/nektos/act' author: 'nektos' tags: ['local', 'github'] subtitle: 'Run your GitHub Actions locally!' --- ![](https://github.com/nektos/act/wiki/img/logo-150.png) # Overview [![Join the chat at https://gitter.im/nektos/act](https://badges.gitter.im/nektos/act.svg)](https://gitter.im/nektos/act?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Go Report Card](https://goreportcard.com/badge/github.com/nektos/act)](https://goreportcard.com/report/github.com/nektos/act) > "Think globally, act locally" Run your [GitHub Actions](https://developer.github.com/actions/) locally! Why would you want to do this? Two reasons: - **Fast Feedback** - Rather than having to commit/push every time you want test out the changes you are making to your `main.workflow` file (or for any changes to embedded GitHub actions), you can use `act` to run the actions locally. The [environment variables](https://developer.github.com/actions/creating-github-actions/accessing-the-runtime-environment/#environment-variables) and [filesystem](https://developer.github.com/actions/creating-github-actions/accessing-the-runtime-environment/#filesystem) are all configured to match what GitHub provides. - **Local Task Runner** - I love [make](). However, I also hate repeating myself. With `act`, you can use the GitHub Actions defined in your `main.workflow` file to replace your `Makefile`! # How Does It Work? When you run `act` it reads in your GitHub Actions from `.github/main.workflow` and determines the set of actions that need to be run. It uses the Docker API to either pull or build the necessary images, as defined in your `main.workflow` file and finally determines the execution path based on the dependencies that were defined. Once it has the execution path, it then uses the Docker API to run containers for each action based on the images prepared earlier. The [environment variables](https://developer.github.com/actions/creating-github-actions/accessing-the-runtime-environment/#environment-variables) and [filesystem](https://developer.github.com/actions/creating-github-actions/accessing-the-runtime-environment/#filesystem) are all configured to match what GitHub provides. Let's see it in action with a [sample repo](https://github.com/cplee/github-actions-demo)! ![Demo](https://github.com/nektos/act/wiki/quickstart/act-quickstart.gif) # Installation To install with [Homebrew](https://brew.sh/), run: `brew install nektos/tap/act` Alternatively, you can use the following: `curl https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bash` # Commands ``` # List the actions act -l # Run the default (`push`) event: act # Run a specific event: act pull-request # Run a specific action: act -a test # Run in dry-run mode: act -n # Run in reuse mode to save state: act -r ``` # Support Need help? Ask on [Gitter](https://gitter.im/nektos/act)! # Contributing Want to contribute to act? Awesome! Check out the [contributing guidelines](CONTRIBUTING.md) to get involved. ## Building from source - Install Go tools 1.11.4+ - (https://golang.org/doc/install) - Clone this repo `git clone git@github.com:nektos/act.git` - Run unit tests with `make check` - Build and install: `make install` ================================================ FILE: src/actions/semantic-release-action.md ================================================ --- path: "/semantic-release-action" title: "GitHub Action for Semantic Release" github_url: "https://github.com/cycjimmy/semantic-release-action" author: "cycjimmy" subtitle: "GitHub Action for Semantic Release" tags: ["semantic","release","actions","github-actions"] --- # Semantic Release Action ![][workflows-badge-image] [![semantic-release][semantic-image]][semantic-url] ![npm license][license-image] [workflows-badge-image]: https://github.com/cycjimmy/semantic-release-action/workflows/Test%20Release/badge.svg [semantic-url]: https://github.com/semantic-release/semantic-release [semantic-image]: https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg [license-image]: https://img.shields.io/npm/l/@cycjimmy/semantic-release-action.svg?style=flat-square GitHub Action for [Semantic Release](https://github.com/semantic-release/semantic-release). ## Usage #### Step1: Set any [Semantic Release Configuration](https://github.com/semantic-release/semantic-release/blob/master/docs/usage/configuration.md#configuration) in your repository. #### Step2: [Add Secrets](https://help.github.com/en/articles/virtual-environments-for-github-actions#creating-and-using-secrets-encrypted-variables) in your repository for the [Semantic Release Authentication](https://github.com/semantic-release/semantic-release/blob/master/docs/usage/ci-configuration.md#authentication) Environment Variables. #### Step3: Add a [Workflow File](https://help.github.com/en/articles/workflow-syntax-for-github-actions) to your repository to create custom automated processes. * inputs: * `branch`: [Optional] The branch on which releases should happen. It will override the branch attribute in your configuration file. If the attribute is not configured on both sides, the default is master. * `semantic_version`: [Optional] Specify specifying version range for semantic-release. If no version range is specified, semantic-release@^15 will be used by default. * `extra_plugins`: [Optional] Extra plugins for pre-install. You can also specify specifying version range for the extra plugins if you prefer. * `dry_run`: [Optional] Whether to run semantic release in `dry-run` mode. It will override the dryRun attribute in your configuration file. * outputs: * `new_release_published`: Whether a new release was published. `true` or `false` * `new_release_version`: Version of the new release * `new_release_major_version`: Major version of the new release * `new_release_minor_version`: Minor version of the new release * `new_release_patch_version`: Patch version of the new release A simple example ```yaml steps: - name: Semantic Release uses: cycjimmy/semantic-release-action@v2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }} ``` An advanced example ```yaml steps: - name: Semantic Release uses: cycjimmy/semantic-release-action@v2 id: semantic # Need an `id` for output variables with: branch: master semantic_version: 15.13.28 # You can specify specifying version range for the extra plugins if you prefer. extra_plugins: | @semantic-release/git @semantic-release/changelog@3.0.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - name: Do something when a new release published if: steps.semantic.outputs.new_release_published == 'true' run: ... ``` ================================================ FILE: src/actions/send-emails.md ================================================ --- path: '/send-emails' title: 'Send Emails' github_url: 'https://github.com/cirrus-actions/email' author: 'cirrus-actions' tags: ['email'] subtitle: 'This is a simple GitHub action that allows to send emails when a GitHub Check Suite completes.' --- [![Build Status](https://api.cirrus-ci.com/github/cirrus-actions/email.svg)](https://cirrus-ci.com/github/cirrus-actions/email) [![](https://images.microbadger.com/badges/version/cirrusactions/email.svg)](https://microbadger.com/images/cirrusactions/email) [![](https://images.microbadger.com/badges/image/cirrusactions/email.svg)](https://microbadger.com/images/cirrusactions/email) This requires a few environment variables: - `APP_NAME` - Name of an application for which to send emails for. - `MAIL_FROM` - email address to send emails from. - `MAIL_HOST` - SMTP host to send emails to. - `MAIL_USERNAME` and `MAIL_PASSWORD` - username and password to authorize with the SMTP server. - `GITHUB_TOKEN` - is standard environment variable for GitHub actions. - optional `IGNORED_CONCLUSIONS` to secify conclusions to report. By default only `success` and `neutral` checks are ignored. Now your action can look liker this in your `.github/main.workflow` workflow file: ``` action "Cirrus CI Email" { uses = "docker://cirrusactions/email:latest" env = { APP_NAME = "Cirrus CI" } secrets = ["GITHUB_TOKEN", "MAIL_FROM", "MAIL_HOST", "MAIL_USERNAME", "MAIL_PASSWORD"] } ``` ================================================ FILE: src/actions/setup-flutter.md ================================================ --- path: '/setup-flutter' title: 'Setup Flutter environment' github_url: 'https://github.com/tnc1997/github-actions/blob/master/setup-flutter' author: 'Thomas Clark' tags: ['flutter'] subtitle: 'Setup a Flutter environment and add it to the PATH.' --- # setup-flutter This action sets up a flutter environment for use in actions by: - optionally downloading and installing a version of flutter by channel and adding to PATH ## Usage See [action.yml](https://github.com/tnc1997/github-actions/blob/master/setup-flutter/action.yml) Basic: ```yaml steps: - uses: actions/checkout@master - uses: tnc1997/github-actions/setup-flutter@master with: channel: 'stable' - run: flutter build appbundle - run: flutter build ios ``` Matrix Testing: ```yaml jobs: build: runs-on: macOS-latest strategy: matrix: flutter: [ 'stable', 'beta', 'dev' ] steps: - uses: actions/checkout@master - uses: tnc1997/github-actions/setup-flutter@master with: channel: ${{ matrix.flutter }} - run: flutter build appbundle - run: flutter build ios ``` ================================================ FILE: src/actions/setup-php.md ================================================ --- path: "/setup-php" title: "setup-php" github_url: "https://github.com/shivammathur/setup-php" author: "shivammathur" twitter: '@meshivammathur' subtitle: "Github action to setup PHP" tags: ['github','github-actions','php','composer','actions'] ---

Setup PHP in GitHub Actions

Setup PHP in GitHub Actions

GitHub Actions status Codecov Code Coverage LICENSE PHP Versions Supported

Setup PHP with required extensions, php.ini configuration, code-coverage support and various tools like composer in [GitHub Actions](https://github.com/features/actions "GitHub Actions"). This action gives you a cross platform interface to setup the PHP environment you need to test your application. Refer to [Usage](https://github.com/shivammathur/setup-php#memo-usage "How to use this") section and [examples](#examples "Examples of use") to see how to use this. ## Contents - [PHP Support](https://github.com/shivammathur/setup-php#tada-php-support) - [OS/Platform Support](https://github.com/shivammathur/setup-php#cloud-osplatform-support) - [PHP Extension Support](https://github.com/shivammathur/setup-php#heavy_plus_sign-php-extension-support) - [Tools Support](https://github.com/shivammathur/setup-php#wrench-tools-support) - [Coverage support](https://github.com/shivammathur/setup-php#signal_strength-coverage-support) - [Xdebug](https://github.com/shivammathur/setup-php#xdebug) - [PCOV](https://github.com/shivammathur/setup-php#pcov) - [Disable Coverage](https://github.com/shivammathur/setup-php#disable-coverage) - [Usage](https://github.com/shivammathur/setup-php#memo-usage) - [Inputs](https://github.com/shivammathur/setup-php#inputs) - [Basic Setup](https://github.com/shivammathur/setup-php#basic-setup) - [Matrix Setup](https://github.com/shivammathur/setup-php#matrix-setup) - [Experimental Setup](https://github.com/shivammathur/setup-php#experimental-setup) - [Thread Safe Setup](https://github.com/shivammathur/setup-php#thread-safe-setup) - [Force Update](https://github.com/shivammathur/setup-php#force-update) - [Verbose Setup](https://github.com/shivammathur/setup-php#verbose-setup) - [Cache Extensions](https://github.com/shivammathur/setup-php#cache-extensions) - [Cache Composer Dependencies](https://github.com/shivammathur/setup-php#cache-composer-dependencies) - [Problem Matchers](https://github.com/shivammathur/setup-php#problem-matchers) - [Examples](https://github.com/shivammathur/setup-php#examples) - [License](https://github.com/shivammathur/setup-php#scroll-license) - [Dependencies](https://github.com/shivammathur/setup-php#bookmark-dependencies) - [Further Reading](https://github.com/shivammathur/setup-php#bookmark_tabs-further-reading) ## PHP Support |PHP Version|Stability|Release Support| |--- |--- |--- | |5.3|`Stable`|`End of life`| |5.4|`Stable`|`End of life`| |5.5|`Stable`|`End of life`| |5.6|`Stable`|`End of life`| |7.0|`Stable`|`End of life`| |7.1|`Stable`|`End of life`| |7.2|`Stable`|`Security fixes only`| |7.3|`Stable`|`Active`| |7.4|`Stable`|`Active`| |8.0|`Experimental`|`In development`| **Note:** Specifying `8.0` in `php-version` input installs a nightly build of `PHP 8.0.0-dev` with `PHP JIT`, `Union Types v2` and other [new features](https://wiki.php.net/rfc#php_80 "New features implemented in PHP 8"). See [experimental setup](https://github.com/shivammathur/setup-php#experimental-setup) for more information. ## OS/Platform Support |Virtual environment|matrix.operating-system| |--- |--- | |Windows Server 2019|`windows-latest` or `windows-2019`| |Ubuntu 18.04|`ubuntu-latest` or `ubuntu-18.04`| |Ubuntu 16.04|`ubuntu-16.04`| |macOS X Catalina 10.15|`macos-latest` or `macOS-10.15`| ## PHP Extension Support - On `ubuntu` by default extensions which are available as a package can be installed. If the extension is not available as a package but it is on `PECL`, it can be installed by specifying `pecl` in the tools input. ```yaml uses: shivammathur/setup-php@v2 with: php-version: '7.4' tools: pecl extensions: swoole ``` - On `windows` extensions which have `windows` binary on `PECL` can be installed. - On `macOS` extensions which are on `PECL` can be installed. - Extensions which are installed along with PHP if specified are enabled. - Specific versions of PECL extensions can be installed by suffixing the extension with the version. This is useful for installing old versions of extensions which support end of life PHP versions. ```yaml uses: shivammathur/setup-php@v2 with: php-version: '7.4' tools: pecl extensions: pcov-1.0.6 ``` - Pre-release versions of PECL extensions can be installed by suffixing the extension with its state i.e `alpha`, `beta`, `devel` or `snapshot`. ```yaml uses: shivammathur/setup-php@v2 with: php-version: '7.4' tools: pecl extensions: xdebug-beta ``` - Extensions which cannot be installed gracefully leave an error message in the logs, the action is not interrupted. ## Tools Support These tools can be setup globally using the `tools` input. `codeception`, `composer`, `composer-prefetcher`, `cs2pr`, `deployer`, `pecl`, `phinx`, `phive`, `phpcbf`, `phpcpd`, `php-config`, `php-cs-fixer`, `phpcs`, `phpize`, `phpmd`, `phpstan`, `phpunit`, `prestissimo`, `psalm`, `symfony` ```yaml uses: shivammathur/setup-php@v2 with: php-version: '7.4' tools: php-cs-fixer, phpunit ``` To setup a particular version of a tool, specify it in the form `tool:version`. Version should be in semver format and a valid release of the tool. ```yaml uses: shivammathur/setup-php@v2 with: php-version: '7.4' tools: php-cs-fixer:2.15.5, phpunit:8.5.1 ``` **Note** - `composer` is setup by default. - Specifying version for `composer` and `pecl` has no effect, latest versions of both tools which are compatible with the PHP version will be setup. - If the version specified for the tool is not in semver format, latest version of the tool will be setup. - Tools which cannot be installed gracefully leave an error message in the logs, the action is not interrupted. ## Coverage support ### Xdebug Specify `coverage: xdebug` to use `Xdebug`. Runs on all [PHP versions supported](https://github.com/shivammathur/setup-php#tada-php-support "List of PHP versions supported on this GitHub Action") except `8.0`. ```yaml uses: shivammathur/setup-php@v2 with: php-version: '7.4' coverage: xdebug ``` ### PCOV Specify `coverage: pcov` to use `PCOV` and disable `Xdebug`. It is much faster than `Xdebug`. `PCOV` needs `PHP >= 7.1`. If your source code directory is other than `src`, `lib` or, `app`, specify `pcov.directory` using the `ini-values` input. ```yaml uses: shivammathur/setup-php@v2 with: php-version: '7.4' ini-values: pcov.directory=api #optional, see above for usage. coverage: pcov ``` ### Disable Coverage Specify `coverage: none` to remove both `Xdebug` and `PCOV`. Consider disabling the coverage using this PHP action for these reasons. - You are not generating coverage reports while testing. - It will remove `Xdebug`, which will have a positive impact on PHP performance. - You are using `phpdbg` for running your tests. ```yaml uses: shivammathur/setup-php@v2 with: php-version: '7.4' coverage: none ``` ## Usage ### Inputs #### `php-version` (required) - Specify the PHP version you want to setup. - Accepts a `string`. For example `'7.4'`. - See [PHP support](https://github.com/shivammathur/setup-php#tada-php-support) for supported PHP versions. #### `extensions` (optional) - Specify the extensions you want to setup. - Accepts a `string` in csv-format. For example `mbstring, zip`. - See [PHP extension support](https://github.com/shivammathur/setup-php#heavy_plus_sign-php-extension-support) for more info. #### `ini-values` (optional) - Specify the values you want to add to `php.ini`. - Accepts a `string` in csv-format. For example `post_max_size=256M, short_open_tag=On`. #### `coverage` (optional) - Specify the code coverage driver you want to setup. - Accepts `xdebug`, `pcov` or `none`. - See [coverage support](https://github.com/shivammathur/setup-php#signal_strength-coverage-support) for more info. #### `tools` (optional) - Specify the tools you want to setup. - Accepts a `string` in csv-format. For example `phpunit, phpcs` - See [tools Support](https://github.com/shivammathur/setup-php#wrench-tools-support) for tools supported. See below for more info. ### Basic Setup > Setup a particular PHP version. ```yaml steps: - name: Checkout uses: actions/checkout@v2 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '7.4' extensions: mbstring, intl ini-values: post_max_size=256M, short_open_tag=On coverage: xdebug tools: php-cs-fixer, phpunit ``` ### Matrix Setup > Setup multiple PHP versions on multiple operating systems. ```yaml jobs: run: runs-on: ${{ matrix.operating-system }} strategy: matrix: operating-system: [ubuntu-latest, windows-latest, macos-latest] php-versions: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4'] name: PHP ${{ matrix.php-versions }} Test on ${{ matrix.operating-system }} steps: - name: Checkout uses: actions/checkout@v2 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php-versions }} extensions: mbstring, intl ini-values: post_max_size=256M, short_open_tag=On coverage: xdebug tools: php-cs-fixer, phpunit ``` ### Experimental Setup > Setup a nightly build of `PHP 8.0.0-dev` from the [master branch](https://github.com/php/php-src/tree/master "Master branch on PHP source repository") of PHP. - This version is currently in development and is an experimental feature on this action. - `PECL` is installed by default with this version on `ubuntu`. - Some extensions might not support this version currently. - Refer to this [RFC](https://wiki.php.net/rfc/jit "PHP JIT RFC configuration") for configuring `PHP JIT` on this version. - Refer to this [list of RFCs](https://wiki.php.net/rfc#php_80 "List of RFCs implemented in PHP8") implemented in this version. ```yaml steps: - name: Checkout uses: actions/checkout@v2 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.0' extensions: mbstring ini-values: opcache.jit_buffer_size=256M, opcache.jit=1235, pcre.jit=1 coverage: pcov tools: php-cs-fixer, phpunit ``` ### Thread Safe Setup - `NTS` versions are setup by default. - On `ubuntu` and `macOS` only NTS versions are supported. - On `windows` both `TS` and `NTS` versions are supported. ```yaml jobs: run: runs-on: windows-latest name: Setup PHP TS on Windows steps: - name: Checkout uses: actions/checkout@v2 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '7.4' env: PHPTS: ts # specify ts or nts ``` ### Force Update - PHP versions which are pre-installed on the GitHub Actions runner are not updated to their latest patch release by default. - You can specify the `update` environment variable to `true` to force update to the latest release. ```yaml - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '7.4' env: update: true # specify true or false ``` ### Verbose Setup - To debug any issues, you can use the `verbose` tag instead of `v2`. ```yaml - name: Setup PHP uses: shivammathur/setup-php@verbose with: php-version: '7.4' ``` ### Cache Extensions You can persist PHP extensions you setup using the [`shivammathur/cache-extensions`](https://github.com/shivammathur/cache-extensions "GitHub Action to cache php extensions") and [`action/cache`](https://github.com/actions/cache "GitHub Action to cache files") GitHub Actions. Extensions which take very long to setup if cached are available in the next workflow run and enabled directly which reduces the workflow execution time. ```yaml runs-on: ${{ matrix.operating-system }} strategy: matrix: operating-system: [ubuntu-latest, windows-latest, macos-latest] php-versions: ['7.2', '7.3', '7.4'] name: PHP ${{ matrix.php-versions }} Test on ${{ matrix.operating-system }} env: extensions: intl, pcov key: cache-v1 # can be any string, change to clear the extension cache. steps: - name: Checkout uses: actions/checkout@v2 - name: Setup cache environment id: cache-env uses: shivammathur/cache-extensions@v1 with: php-version: ${{ matrix.php-versions }} extensions: ${{ env.extensions }} key: ${{ env.key }} - name: Cache extensions uses: actions/cache@v1 with: path: ${{ steps.cache-env.outputs.dir }} key: ${{ steps.cache-env.outputs.key }} restore-keys: ${{ steps.cache-env.outputs.key }} - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php-versions }} extensions: ${{ env.extensions }} ``` ### Cache Composer Dependencies You can persist composer's internal cache directory using the [`action/cache`](https://github.com/actions/cache "GitHub Action to cache files") GitHub Action. Dependencies cached are loaded directly instead of downloading them while installation. The files cached are available across check-runs and will reduce the workflow execution time. **Note:** Please do not cache `vendor` directory using `action/cache` as that will have side-effects. ```yaml - name: Get Composer Cache Directory id: composer-cache run: echo "::set-output name=dir::$(composer config cache-files-dir)" - name: Cache dependencies uses: actions/cache@v1 with: path: ${{ steps.composer-cache.outputs.dir }} key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} restore-keys: ${{ runner.os }}-composer- - name: Install Dependencies run: composer install --prefer-dist ``` In the above example, if you support a range of `composer` dependencies and do not commit `composer.lock`, you can use the hash of `composer.json` as the key for your cache. ```yaml key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} ``` ### Problem Matchers #### PHP Setup problem matchers for your `PHP` output by adding this step after the `setup-php` step. This will scan the logs for PHP errors and warnings, and surface them prominently in the GitHub Actions UI by creating annotations and log file decorations. ```yaml - name: Setup Problem Matchers for PHP run: echo "::add-matcher::${{ runner.tool_cache }}/php.json" ``` #### PHPUnit Setup problem matchers for your `PHPUnit` output by adding this step after the `setup-php` step. This will scan the logs for failing tests and surface that information prominently in the GitHub Actions UI by creating annotations and log file decorations. ```yaml - name: Setup Problem Matchers for PHPUnit run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json" ``` #### Other Tools For tools that support `checkstyle` reporting like `phpstan`, `psalm`, `php-cs-fixer` and `phpcs` you can use `cs2pr` to annotate your code. For examples refer to [cs2pr documentation](https://github.com/staabm/annotate-pull-request-from-checkstyle). > Here is an example with `phpstan`. ```yaml - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '7.4' tools: cs2pr, phpstan - name: PHPStan run: phpstan analyse src --error-format=checkstyle | cs2pr ``` ### Examples Check examples for setting up this GitHub Action with different PHP Frameworks/Packages [here](https://github.com/shivammathur/setup-php#examples). ## License The scripts and documentation in this project are released under the [MIT License](https://github.com/shivammathur/setup-php/blob/master/LICENSE "License for shivammathur/setup-php"). This project has multiple [dependencies](https://github.com/shivammathur/setup-php#bookmark-dependencies "Dependencies for this PHP Action"). Their licenses can be found in their respective repositories. ## Dependencies - [Node.js dependencies](https://github.com/shivammathur/setup-php/network/dependencies "Node.js dependencies") - [gplessis/dotdeb-php](https://github.com/gplessis/dotdeb-php "Packaging for end of life PHP versions") - [mlocati/powershell-phpmanager](https://github.com/mlocati/powershell-phpmanager "Package to handle PHP on windows") - [ppa:ondrej/php](https://launchpad.net/~ondrej/+archive/ubuntu/php "Packaging active PHP packages") - [shivammathur/cache-extensions](https://github.com/shivammathur/cache-extensions "GitHub action to help with caching PHP extensions") - [shivammathur/homebrew-php](https://github.com/shivammathur/homebrew-php "Tap for PHP builds for MacOS") - [shivammathur/php-builder](https://github.com/shivammathur/php-builder "Nightly PHP package") - [shivammathur/php5-ubuntu](https://github.com/shivammathur/php5-ubuntu "Scripts to setup PHP5 versions") ## Further Reading - [About GitHub Actions](https://github.com/features/actions "GitHub Actions") - [GitHub Actions Syntax](https://help.github.com/en/articles/workflow-syntax-for-github-actions "GitHub Actions Syntax") - [Other Awesome Actions](https://github.com/sdras/awesome-actions "List of Awesome GitHub Actions") ================================================ FILE: src/actions/shaking-finger.md ================================================ --- path: '/shaking-finger' title: 'Shaking Finger' github_url: 'https://github.com/jessfraz/shaking-finger-action' author: 'jessfraz' tags: ['gif', 'fun'] subtitle: 'A GitHub action that displays a gif of Conan O`Brien shaking his finger to a pull request on fail. It will also automatically clean up the comment when the build passes :)' --- [![Travis CI](https://img.shields.io/travis/jessfraz/shaking-finger-action.svg?style=for-the-badge)](https://travis-ci.org/jessfraz/shaking-finger-action) A GitHub action that displays a gif of Conan O'Brien shaking his finger to a pull request on fail. It will also automatically clean up the comment when the build passes :) **Table of Contents** - [Usage](#usage) - [Contributing](#contributing) - [Running the tests](#running-the-tests) ## Usage ``` workflow "shaking finger action" { on = "pull_request" resolves = ["post gif on fail"] } action "post gif on fail" { uses = "jessfraz/shaking-finger-action@master" secrets = ["GITHUB_TOKEN"] } ``` ![demo](https://github.com/jessfraz/shaking-finger-action/raw/master/demo.png) ## Contributing ### Running the tests The tests use [shellcheck](https://github.com/koalaman/shellcheck). You don't need to install anything. They run in a container. ```console $ make test ``` ================================================ FILE: src/actions/size-label-action.md ================================================ --- path: '/size-label' title: 'Assign size labels' github_url: 'https://github.com/pascalgn/size-label-action' author: 'Pascal' twitter: '@pascalgn' tags: ['label', 'assign'] subtitle: 'GitHub action to assign labels based on pull request change sizes.' --- Labels are taken from https://github.com/kubernetes/kubernetes/labels?q=size ## Usage Add this to your `.github/main.workflow` file: ``` workflow "on pull request changes, assign size labels" { on = "pull_request" resolves = ["assign size labels"] } action "assign size labels" { uses = "pascalgn/size-label-action@6e8642272f404d447c8a912dc095295f70341724" secrets = ["GITHUB_TOKEN"] } ``` ================================================ FILE: src/actions/slack-message-as-bot.md ================================================ --- path: '/slack-message-as-bot' title: 'Slack Message as bot' github_url: 'https://github.com/pullreminders/slack-github-action' author: 'pullreminders' tags: ['slack'] subtitle: ' This action wraps the Slack chat.postMessage API method for posting to channels, private groups, and DMs. This action is designed to be used with Slack bot tokens. Slack bots have two main advantages versus user tokens and incoming webhooks: (1) Bots cant be disabled inadvertently when a Slack user is disabled or removed. Slack has written about this in a recent announcement, and (2) Bots offer a powerful range of capabilities that can be leveraged to perform more functions.' --- ## Usage: ```workflow action "Post message to Slack" { uses = "pullreminders/slack-github-action@master" secrets = [ "SLACK_BOT_TOKEN", ] args = "{\"channel\":\"C1234567890\",\"text\":"Hello world"}" } ``` Here's what the Slack message would look like: ## Setup To use this GitHub Action you'll first need to create a Slack App and install it to your Slack workspace. ### Creating a Slack App 1. **Create a Slack App**. Go to [Slack's developer site](https://api.slack.com/apps) then click "Create an app". Name the app "GitHub Action" (you can change this later) and make sure your team's Slack workspace is selected under "Development Slack Workspace" ([see screenshot](docs/images/slack-app.png)). 2. **Add a Bot user**. Browse to the "Bot users" page listed in the sidebar. Name your bot "GitHub Action" (you can change this later) and leave the other default settings as-is ([see screenshot](docs/images/bot-user.png)). 3. **Set an icon for your bot.** Browse to the "Basic information" page listed in the sidebar. Scroll down to the section titled "Display information" to set an icon. Feel free to use one of the [icons in this repository](docs/app-icons). 4. **Install your app to your workspace.** At the top of the "Basic information" page you can find a section titled "Install your app to your workspace". Click on it, then use the button to complete the installation ([see screenshot](docs/images/install-slack-all.png)). ## Using the action To use this GitHub Action, you'll need to set a `SLACK_BOT_TOKEN` secret on GitHub. To get your Slack bot token, browse to the "OAuth & Permissions" page listed in Slack and copy the "Bot User OAuth Access Token" beginning in `xoxb-`. ### Posting messages Slack's [chat.postMessage](https://api.slack.com/methods/chat.postMessage) method accepts a JSON payload containing options — this JSON payload should be supplied as the argument in your GitHub Action. At a bare minimum, your payload must include a channel ID and the message. Here's what a basic message might look like: ```workflow action "Post message to Slack" { uses = "pullreminders/slack-github-action@master" secrets = [ "SLACK_BOT_TOKEN", ] args = "{\"channel\":\"C1234567890\",\"text\":"Hello world"}" } ``` Please note that if you are using the visual editor you should not escape quotes because GitHub will automatically escape them for you. #### Channel IDs A "channel ID" can be the ID of a channel, private group, or user you would like to post a message to. Your bot can message any user in your Slack workspace but needs to be invited into channels and private groups before it can post to them. If you open Slack in your web browser, you can find channel IDs at the end of the URL when viewing channels and private groups. Note that this doesn't work for direct messages. ``` https://myworkspace.slack.com/messages/CHANNEL_ID/ ``` You can also find channel IDs using the Slack API. Get a list of channels that your bot is a member of via Slack's [users.conversations](https://api.slack.com/methods/users.conversations) endpoint. Get user IDs for direct messages using Slack's [users.lookupByEmail](https://api.slack.com/methods/users.lookupByEmail) endpoint #### Formatting messages Please refer to [Slack's documentation](https://api.slack.com/docs/messages) on message formatting. They also have a [message builder](https://api.slack.com/docs/messages/builder) that's great for playing around and previewing messages. Your messages can contain attachments, markdown, buttons, and more. ## Secrets - `SLACK_BOT_TOKEN` - **Required**. The Slack bot token to use for posting messages ([more info](https://api.slack.com/docs/token-types#bot)) ================================================ FILE: src/actions/slack-message.md ================================================ --- path: '/slack-message' title: 'Slack message' github_url: 'https://github.com/apex/actions' author: 'apex' tags: ['slack'] subtitle: 'GitHub Action for sending Slack messages which were defined by previous action(s) in ./slack.json.' --- ## Secrets - `SLACK_WEBHOOK_URL` - _Required_ The Slack webhook URL. ## Environment Variables - `SLACK_CHANNEL` - _Optional_ The Slack channel name. - `SLACK_USERNAME` - _Optional_ The Slack message username. - `SLACK_ICON` - _Optional_ The Slack message icon. ## Example This example sends a Slack notification after a deployment is complete. The `apex/actions/up` action generates a slack.json to provide a message. ```hcl workflow "Deployment" { on = "push" resolves = ["Deploy Notification"] } action "Build" { uses = "apex/actions/go@master" } action "Deploy" { needs = "Build" uses = "apex/actions/up@master" secrets = ["AWS_SECRET_ACCESS_KEY", "AWS_ACCESS_KEY_ID"] args = "deploy production" } action "Deploy Notification" { needs = "Deploy" uses = "apex/actions/slack@master" secrets = ["SLACK_WEBHOOK_URL"] } ``` ## Links - Message format: https://api.slack.com/docs/messages/builder ================================================ FILE: src/actions/sleep.md ================================================ --- path: '/sleep' title: 'Sleep' github_url: 'https://github.com/maddox/actions' author: 'maddox' tags: [] subtitle: 'Sometimes you just need to stall a little. This action will simply call sleep for N seconds in case you need a little padding in your workflow.' --- image ## Usage To use the action simply add the following lines to your `.github/main.workflow` ``` action "Sleep" { uses = "maddox/actions/sleep@master" args = "15" } ``` ### Required Arguments The only argument used or required is the number of seconds you want to sleep for. ## License The Dockerfile and associated scripts and documentation in this project are released under the [MIT License](LICENSE). ================================================ FILE: src/actions/spothub.md ================================================ --- path: '/spothub' title: 'SpotHub' github_url: 'https://github.com/swinton/SpotHub' author: 'swinton' tags: [] subtitle: 'Collaborate on Spotify playlists using Pull Requests.' --- ## How does this even work? Using [**GitHub Actions**](https://github.com/features/actions) of course! On every `push` to the `master` branch, [the Action](https://github.com/swinton/SpotHub/blob/bc2d697744a710bce3ce6a56a10d473045c3ea53/.github/actions/spotify-playlist/Dockerfile) will: 1. [Grab a fresh _access token_ from Spotify](https://github.com/swinton/SpotHub/blob/bc2d697744a710bce3ce6a56a10d473045c3ea53/.github/actions/spotify-playlist/get_access_token.sh), using the `SPOTIFY_AUTH` and `SPOTIFY_REFRESH_TOKEN` [secrets](https://developer.github.com/actions/creating-workflows/storing-secrets/). 1. [Generate a JSON payload](https://github.com/swinton/SpotHub/blob/bc2d697744a710bce3ce6a56a10d473045c3ea53/.github/actions/spotify-playlist/process_playlist.sh), from [`playlist.csv`](playlist.csv). 1. [Update a playlist on Spotify](https://github.com/swinton/SpotHub/blob/bc2d697744a710bce3ce6a56a10d473045c3ea53/.github/actions/spotify-playlist/populate_playlist.sh), specified by the `playlist_id` [environment variable](https://developer.github.com/actions/creating-github-actions/accessing-the-runtime-environment/#environment-variables). ## What do I do? 1. Update `playlist.csv` 1. `git commit` 1. `git push` 1. Enjoy your [updated Spotify playlist](https://open.spotify.com/user/stevewinton/playlist/5lNXObovv3WL1Ioyag2FuG) ## Why was this built? So we can [collaborate on playlists the right way](https://github.com/swinton/SpotHub/pull/1) :wink: Also, because I :heart: Spotify and GitHub, and now I can bring 2 of my favorite things together with [GitHub Actions](https://github.com/features/actions). Sign up for the GitHub Actions beta [here](https://github.com/features/actions) :headphones: :relaxed: ================================================ FILE: src/actions/ssh.md ================================================ --- path: '/ssh' title: 'SSH' github_url: 'https://github.com/maddox/actions' author: 'maddox' tags: [] subtitle: 'Run a thing on your server. This action will run the provided argument as a command on your $HOST via SSH.' --- image ## Usage To use the action simply add the following lines to your `.github/main.workflow` ``` action "Run deploy script" { uses = "maddox/actions/ssh@master" args = "/opt/deploy/run" secrets = [ "PRIVATE_KEY", "PUBLIC_KEY", "HOST", "USER" ] } ``` ### Required Arguments The argument you will use is the command that will be ran on your sever via SSH. #### Examples - `args = "/opt/deploy/run"` - `args = "touch ~/.reload"` ### Required Secrets You'll need to provide some secrets to use the action. - **PRIVATE_KEY**: Your SSH private key. - **PUBLIC_KEY**: Your SSH public key. - **HOST**: The host the action will SSH to to run the command. ie, `your.site.com`. - **USER**: The user the SSH command will auth as with the public key. ================================================ FILE: src/actions/storybook-surge.md ================================================ --- path: '/storybook-surge' title: 'Storybook to Surge' github_url: 'https://github.com/codeship/storybook-surge-github-action' author: 'codeship' tags: ['react'] subtitle: 'This action will take an existing storybook configuration and deploy that storybook to branch specific static surge.sh sites. Intended to be set up on `push`.' --- ### Required Secrets You can set these up within the workflow editor tool. - `SURGE_LOGIN` - `SURGE_TOKEN` ### Behavior When you push to your repository this action will: - Start a pending GitHub Deployment for the branch - Build your storybook - Deploy your storybook to a public surge.sh site - Update the pending GitHub Deployment with the URL of the storybook. The urls follow the pattern: https://{repo_owner}-{repo_name}-storybook-{branch_name}.surge.sh ### Example workflow ``` workflow "Storybook" { on = "push" resolves = ["Publish Storybook to Surge.sh"] } action "Publish Storybook to Surge.sh" { uses = "codeship/storybook-surge-github-action@0.0.1" secrets = [ "SURGE_LOGIN", "SURGE_TOKEN", "GITHUB_TOKEN", ] } ``` ================================================ FILE: src/actions/synk-cli.md ================================================ --- path: '/synk-cli' title: 'Synk Cli' github_url: 'https://github.com/clarkio/snyk-cli-action' author: 'clarkio' tags: ['security'] subtitle: 'A GitHub action to run snyk test for vulnerabilities in the project' --- ## How to Use 1. Add Action 2. Enter `clarkio/snyk-cli-action@master` 3. Add Secret named `SNYK_TOKEN` 4. Go to your [Snyk Account Settings](https://app.snyk.io/account) and get your API token value 5. Enter the value of the token you copied from Snyk as the secret in the GitHub Action ================================================ FILE: src/actions/terraform.md ================================================ --- path: '/terraform' title: 'Terraform' github_url: 'https://github.com/hashicorp/terraform-github-actions/blob/master/README.md' author: 'hashicorp' tags: ['terraform'] subtitle: 'These official Terraform GitHub Actions allow you to run `terraform fmt`, `validate` and `plan` on your pull requests to help you review and validate Terraform changes.' --- ## Getting Started To get started, check out our documentation: [https://www.terraform.io/docs/github-actions/getting-started/](https://www.terraform.io/docs/github-actions/getting-started/). ## Actions ### Fmt Action Runs `terraform fmt` and comments back if any files are not formatted correctly. Terraform Fmt Action ### Validate Action Runs `terraform validate` and comments back on error. Terraform Validate Action ### Plan Action Runs `terraform plan` and comments back with the output. Terraform Plan Action ================================================ FILE: src/actions/tslint-linter.md ================================================ --- path: '/tslint-linter' title: 'TypeScript linter & formatter' github_url: 'https://github.com/bltavares/actions' author: 'bltavares' tags: ['typescript', 'lint', 'formatter', 'autofixer'] subtitle: 'This actions will check Typescript projects using tslint' --- ## Validations on Push This actions will check Typescript projects using [tslint](https://github.com/palantir/tslint) `tslint` requires a `tsconfig.json` to be located on the root of the project, describing how the Typescript project is organized, and a `tslint.json` file to define the rules that the linter will follow. ## Fixes on Pull Request review This action provides automated fixes using Pull Request review comments. If the comment starts with `fix $action_name` or `fix tslint`, a new commit will be added to the branch with the automated fixes applied. **Supports**: autofix on push ## Example workflow ```hcl workflow "on push" { on = "push" resolves = ["tslint"] } # Used for fix on review workflow "on review" { resolves = ["tslint"] on = "pull_request_review" } action "tslint" { uses = "bltavares/actions/tslint@master" # Enable autofix on push # args = ["autofix"] # Used for pushing changes for `fix` comments on review secrets = ["GITHUB_TOKEN"] } ``` ================================================ FILE: src/actions/tweet.md ================================================ --- path: '/twitter-action' title: 'Send a Tweet' github_url: 'https://github.com/xorilog/twitter-action' author: 'xorilog' tags: ['twitter', 'tweet'] subtitle: 'Send a tweet with a GitHub Action.' --- Small action which sends a tweet. # Auth About the authentication see: https://developer.twitter.com/en/apps create an account, create an app @see https://apps.twitter.com/ # retrieve the access tokens @see https://developer.twitter.com/en/apps # Use Action ``` workflow "on push tag, tweet message" { on = "push" resolves = ["Advertise tweetosphere"] } action "Advertise tweetosphere" { uses = "xorilog/twitter-action@master" args = ["-message", "New version is out ! $GITHUB_REF"] secrets = ["TWITTER_CONSUMER_KEY", "TWITTER_CONSUMER_SECRET", "TWITTER_ACCESS_TOKEN", "TWITTER_ACCESS_SECRET"] } ``` # Build ``` go get . go build ``` # Usage ``` export TWITTER_CONSUMER_KEY=xxx export TWITTER_CONSUMER_SECRET=xxx export TWITTER_ACCESS_TOKEN=xxx export TWITTER_ACCESS_SECRET=xxx ./twitter-action -message "Hello Twitter :)" ``` # Docker ``` # If building locally docker build -t xorilog/twitter-action . # else: docker run --rm -e TWITTER_CONSUMER_KEY=${TWITTER_CONSUMER_KEY} \ -e TWITTER_CONSUMER_SECRET=${TWITTER_CONSUMER_SECRET} \ -e TWITTER_ACCESS_TOKEN=${TWITTER_ACCESS_TOKEN} \ -e TWITTER_ACCESS_SECRET=${TWITTER_ACCESS_SECRET} \ xorilog/twitter-action -message "Hello Twitter :)" ``` ================================================ FILE: src/actions/twitter-action.md ================================================ --- path: '/twitter-action' title: 'Send a Tweet' github_url: 'https://github.com/xorilog/twitter-action' author: 'xorilog' tags: ['twitter', 'tweet'] subtitle: 'Send a tweet with a GitHub Action.' --- Small action which sends a tweet. # Auth About the authentication see: https://developer.twitter.com/en/apps create an account, create an app @see https://apps.twitter.com/ # retrieve the access tokens @see https://developer.twitter.com/en/apps # Use Action ``` workflow "on push tag, tweet message" { on = "push" resolves = ["Advertise tweetosphere"] } action "Advertise tweetosphere" { uses = "xorilog/twitter-action@master" args = ["-message", "New version is out ! $GITHUB_REF"] secrets = ["TWITTER_CONSUMER_KEY", "TWITTER_CONSUMER_SECRET", "TWITTER_ACCESS_TOKEN", "TWITTER_ACCESS_SECRET"] } ``` # Build ``` go get . go build ``` # Usage ``` export TWITTER_CONSUMER_KEY=xxx export TWITTER_CONSUMER_SECRET=xxx export TWITTER_ACCESS_TOKEN=xxx export TWITTER_ACCESS_SECRET=xxx ./twitter-action -message "Hello Twitter :)" ``` # Docker ``` # If building locally docker build -t xorilog/twitter-action . # else: docker run --rm -e TWITTER_CONSUMER_KEY=${TWITTER_CONSUMER_KEY} \ -e TWITTER_CONSUMER_SECRET=${TWITTER_CONSUMER_SECRET} \ -e TWITTER_ACCESS_TOKEN=${TWITTER_ACCESS_TOKEN} \ -e TWITTER_ACCESS_SECRET=${TWITTER_ACCESS_SECRET} \ xorilog/twitter-action -message "Hello Twitter :)" ``` ================================================ FILE: src/actions/vamp.md ================================================ --- path: '/vamp' title: 'vamp' github_url: 'https://github.com/magneticio/vamp-github-actions' author: 'magneticio' subtitle: 'GitHub Actions For Vamp' tags: [] --- # Vamp GitHub Actions These official Vamp GitHub Actions allow you to run Vamp CLI commands within you GitHub actions workflow. ## Getting Started ## Actions Usage information for individual actions can be found in their respective directories. ### CLI Action Wraps the Vamp CLI to enable Vamp commands to be run. [action](https://github.com/magneticio/vamp-github-actions/blob/master/cli) ### Login Action Wraps the Vamp CLI `vamp login` command, allowing for Actions to log into Vamp. [action](https://github.com/magneticio/vamp-github-actions/blob/master/login) ### Workflow Action Wraps the Vamp CLI, allowing for Actions to create a Vamp Workflow. [action](https://github.com/magneticio/vamp-github-actions/blob/master/workflow) ================================================ FILE: src/actions/vscode-vsce.md ================================================ --- path: '/vscode-vsce' title: 'vscode deploying extensions' github_url: 'https://github.com/lannonbr/vsce-action' author: 'lannonbr' tags: ['vscode'] subtitle: 'A GitHub Action to automate deploying VS Code extensions by using vsce. It will enable workflows to easily deploy your VS Code extensions to the marketplace.' --- # Usage Here's an example workflow which publishes an extension when you push to the master branch. ```workflow workflow "Deploy Extension" { on = "push" resolves = ["Publish"] } # Install npm dependencies # Note: --unsafe-perm is used as GitHub Actions does not run `npm run post-install` without it for some reason. action "npm install" { uses = "actions/npm@33871a7" args = ["install", "--unsafe-perm"] } # Check for master branch action "Master" { uses = "actions/bin/filter@master" args = "branch master" needs = ["npm install"] } # publish extension action "Publish" { uses = "lannonbr/vsce-action@master" args = "publish -p $VSCE_TOKEN" needs = ["Master"] secrets = ["VSCE_TOKEN"] } ``` # Secrets The `VSCE_TOKEN` secret is used to authenticate with Azure DevOps when running the `vsce` CLI. You can find out how to create this token here on the VS Code Docs: [Publishing VS Code Extensions](https://code.visualstudio.com/docs/extensions/publish-extension) # Example Use Cases - Deploy nightly builds once a day if the `master` branch has changed since the last build. - Deploy releases after PRs with a `Release` label are merged into Master. - Promote new version of extension on social media with additional Actions. Creating and publishing extensions with `vsce` is already fairly simple, but this will further integrate it into CI workflows with GitHub Actions. ================================================ FILE: src/actions/wait-for-200.md ================================================ --- path: '/wait-for-200' title: 'Wait for 200' github_url: 'https://github.com/maddox/actions' author: 'maddox' tags: [] subtitle: 'Wait till the host is up. This action will simply check that a URL is returning a `200` HTTP status code before completing. You have the option to set how many seconds between checks and how many tries before it exits in failure.' --- image ## Usage To use the action simply add the following lines to your `.github/main.workflow` ``` action "Wait for 200" { uses = "maddox/actions/wait-for-200@master" } ``` ### Required Environment Variables You'll need to provide some environment variables to specify exactly how you want the action to work. - **URL**: The URL you want to poll. ie, `https://domain.com`. - **SECONDS_BETWEEN_CHECKS**: How many seconds you want to wait between checking if the URL returns a `200` HTTP status code. ie, `2`. - **MAX_TRIES**: The number of tries before failing. ie, `20`. ## License The Dockerfile and associated scripts and documentation in this project are released under the [MIT License](LICENSE). ================================================ FILE: src/actions/webpack-stats-to-packtracker.md ================================================ --- path: '/webpack-stats-to-packtracker' title: 'Webpack stats to packtracker.io' github_url: 'https://github.com/packtracker/github-action' author: 'packtracker' tags: ['webpack'] subtitle: 'This GitHub action will upload your webpack build stats to the packtracker.io service.' --- ### Configuration #### Secrets (Required) - `PT_PROJECT_TOKEN` - your [packtracker.io](https://packtracker.io/?utm_source=github&utm_medium=action&utm_campaign=links) project token. #### Environment variables (Optional) - `WEBPACK_CONFIG_PATH` - the relative path to your webpack configuration (if you have one) #### Workflow A sample workflow file might look something like this ``` workflow "packtracker.io" { on = "push" resolves = ["Report to packtracker.io"] } action "Report to packtracker.io" { uses = "packtracker/github-action@1.1.2" secrets = ["PT_PROJECT_TOKEN"] env = { "WEBPACK_CONFIG_PATH" = "./config/webpack/production.js" } } ``` ================================================ FILE: src/actions/wemake-python-styleguide.md ================================================ --- path: "/wemake-python-styleguide" title: "wemake-python-styleguide" github_url: "https://github.com/wemake-services/wemake-python-styleguide" author: "wemake-services" subtitle: "The strictest and most opinionated python linter ever!" tags: ["python","python3","flake8","flake8-plugin","styleguide","wemake-services","code-quality","linter"] --- # wemake-python-styleguide [![wemake.services](https://img.shields.io/badge/%20-wemake.services-green.svg?label=%20&logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC%2FxhBQAAAAFzUkdCAK7OHOkAAAAbUExURQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP%2F%2F%2F5TvxDIAAAAIdFJOUwAjRA8xXANAL%2Bv0SAAAADNJREFUGNNjYCAIOJjRBdBFWMkVQeGzcHAwksJnAPPZGOGAASzPzAEHEGVsLExQwE7YswCb7AFZSF3bbAAAAABJRU5ErkJggg%3D%3D)](https://wemake.services) [![Supporters](https://img.shields.io/opencollective/all/wemake-python-styleguide.svg?color=gold&label=supporters)](https://opencollective.com/wemake-python-styleguide) [![Build Status](https://travis-ci.org/wemake-services/wemake-python-styleguide.svg?branch=master)](https://travis-ci.org/wemake-services/wemake-python-styleguide) [![Coverage Status](https://coveralls.io/repos/github/wemake-services/wemake-python-styleguide/badge.svg?branch=master)](https://coveralls.io/github/wemake-services/wemake-python-styleguide?branch=master) [![Github Action](https://github.com/wemake-services/wemake-python-styleguide/workflows/wps/badge.svg)](https://github.com/wemake-services/wemake-python-styleguide/actions) [![Python Version](https://img.shields.io/pypi/pyversions/wemake-python-styleguide.svg)](https://pypi.org/project/wemake-python-styleguide/) [![wemake-python-styleguide](https://img.shields.io/badge/style-wemake-000000.svg)](https://github.com/wemake-services/wemake-python-styleguide) --- Welcome to the strictest and most opinionated python linter ever.

wemake-python-styleguide logo

`wemake-python-styleguide` is actually a [flake8](http://flake8.pycqa.org/en/latest/) plugin with [some other plugins](https://wemake-python-stylegui.de/en/latest/pages/usage/violations/index.html#external-plugins) as dependencies. ## Quickstart ```bash pip install wemake-python-styleguide ``` You will also need to create a `setup.cfg` file with the [configuration](https://wemake-python-stylegui.de/en/latest/pages/usage/configuration.html). We highly recommend to also use: - [flakehell](https://wemake-python-stylegui.de/en/latest/pages/usage/integrations/flakehell.html) for easy integration into a **legacy** codebase - [nitpick](https://wemake-python-stylegui.de/en/latest/pages/usage/integrations/nitpick.html) for sharing and validating configuration across multiple projects ## Running ```bash flake8 your_module.py ``` This app is still just good old `flake8`! And it won't change your existing workflow.

invocation resuts

See ["Usage" section](https://wemake-python-stylegui.de/en/latest/pages/usage/setup.html) in the docs for examples and integrations. ## What we are about The ultimate goal of this project is to make all people write **exactly** the same `python` code. | | black | mypy | pylint | flake8 | wemake-python-styleguide | |----------------------------|-------|------|--------|--------|--------------------------| | Formats code? | ✅ | ❌ | ❌ | ❌ | ❌ | | Finds style issues? | ✅ | ❌ | ✅ | ✅ | ✅ | | Finds bugs? | ❌ | ✅ | ✅ | 🤔 | ✅ | | Finds complex code? | ❌ | ❌ | ✅ | 🤔 | ✅ | | Has a lot of strict rules? | ❌ | ❌ | 🤔 | ❌ | ✅ | | Has a lot of plugins? | ❌ | ❌ | ❌ | ✅ | ✅ | We have several primary objectives: 0. Enforce `python3.6+` usage 1. Significantly reduce complexity of your code and make it more maintainable 2. Enforce "There should be one -- and preferably only one -- obvious way to do it" rule to coding and naming styles 3. Protect developers from possible errors and enforce best practices You can find all error codes and plugins [in the docs](https://wemake-python-stylegui.de/en/latest/pages/usage/violations/index.html). ## What we are not We are *not* planning to do the following things: 0. Assume or check types, use `mypy` together with our linter 1. [Reformat code](https://wemake-python-stylegui.de/en/latest/pages/usage/integrations/auto-formatters.html), since we believe that developers should do that 2. Check for `SyntaxError` or logical bugs, write tests instead 3. Appeal to everyone. But, you can [switch off](https://wemake-python-stylegui.de/en/latest/pages/usage/setup.html#ignoring-violations) any rules that you don't like ## Supporting us We in [wemake.services](https://wemake.services) make all our tools open-source by default, so the community can benefit from them. If you use our tools and they make your life easier and brings business value, you can return us a favor by supporting the work we do. [![Gold Tier](https://opencollective.com/wemake-python-styleguide/tiers/gold-sponsor.svg?width=890)](https://opencollective.com/wemake-python-styleguide) [![Silver Tier](https://opencollective.com/wemake-python-styleguide/tiers/silver-sponsor.svg?width=890&avatarHeight=45&button=0)](https://opencollective.com/wemake-python-styleguide) [![Bronze Tier](https://opencollective.com/wemake-python-styleguide/tiers/bronze-sponsor.svg?width=890&avatarHeight=35&button=0)](https://opencollective.com/wemake-python-styleguide) ## Show your style If you use our linter - it means that your code is awesome. You can be proud of it! And you should share your accomplishment with others by including a badge to your `README` file. It looks like this: [![wemake-python-styleguide](https://img.shields.io/badge/style-wemake-000000.svg)](https://github.com/wemake-services/wemake-python-styleguide) ### Markdown ```md [![wemake-python-styleguide](https://img.shields.io/badge/style-wemake-000000.svg)](https://github.com/wemake-services/wemake-python-styleguide) ``` ### Restructured text ```rst .. image:: https://img.shields.io/badge/style-wemake-000000.svg :target: https://github.com/wemake-services/wemake-python-styleguide ``` ## Contributing We **warmly welcome** all contributions! [![List of contributors](https://opencollective.com/wemake-python-styleguide/contributors.svg?width=890&button=0)](https://github.com/wemake-services/wemake-python-styleguide/graphs/contributors) See ["Contributing"](https://wemake-python-stylegui.de/en/latest/pages/api/index.html#contributing) section in the documentation if you want to contribute. You can start with [issues that need some help](https://github.com/wemake-services/wemake-python-styleguide/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) right now. ================================================ FILE: src/actions/wip.md ================================================ --- path: '/wip' title: 'Work In Progress' github_url: 'https://github.com/wip/action' author: 'wip' subtitle: 'a work in progress action - work in progress' tags: [] ---

DO NOT MERGE – as an action.

This GitHub Action sets a pull request status to pending if the title includes "WIP". An example workflow looks like this (switch to the `<> Edit new file` tab when creating a new action and paste the code below): ```workflow workflow "Set status on pull_request" { on = "pull_request" resolves = ["Set status"] } action "Set status" { uses = "wip/action@master" secrets = ["GITHUB_TOKEN"] } ``` ================================================ FILE: src/actions/wordpress-dotorg-plugin-deploy.md ================================================ --- path: "/wordpress-dotorg-plugin-deploy" title: "WordPress.org Plugin Deploy" github_url: "https://github.com/10up/action-wordpress-plugin-deploy" author: "10up" twitter: "@10up" subtitle: "Deploy your plugin to the WordPress.org repository using GitHub Actions." tags: [wordpress,plugin,deploy] --- # WordPress.org Plugin Deploy This Action commits the contents of your Git tag to the WordPress.org plugin repository using the same tag name. It can exclude files as defined in either `.distignore` or `.gitattributes`, and moves anything from a `.wordpress-org` subdirectory to the top-level `assets` directory in Subversion (plugin banners, icons, and screenshots). ### ☞ For updating the readme and items in the assets directory between releases, please see our [WordPress.org Plugin Readme/Assets Update Action](https://github.com/10up/action-wordpress-plugin-asset-update) ## Configuration ### Required secrets * `SVN_USERNAME` * `SVN_PASSWORD` [Secrets are set in your repository settings](https://help.github.com/en/articles/virtual-environments-for-github-actions#creating-and-using-secrets-encrypted-variables). They cannot be viewed once stored. ### Optional environment variables * `SLUG` - defaults to the repository name, customizable in case your WordPress repository has a different slug or is capitalized differently. * `VERSION` - defaults to the tag name; do not recommend setting this except for testing purposes. * `ASSETS_DIR` - defaults to `.wordpress-org`, customizable for other locations of WordPress.org plugin repository-specific assets that belong in the top-level `assets` directory (the one on the same level as `trunk`). ## Excluding files from deployment If there are files or directories to be excluded from deployment, such as tests or editor config files, they can be specified in either a `.distignore` file or a `.gitattributes` file using the `export-ignore` directive. If a `.distignore` file is present, it will be used; if not, the Action will look for a `.gitattributes` file and barring that, will write a basic temporary `.gitattributes` into place before proceeding so that no Git/GitHub-specific files are included. `.distignore` is useful particularly when there are built files that are in `.gitignore`, and is a file that is used in [WP-CLI](https://wp-cli.org/). For modern plugin setups with a build step and no built files committed to the repository, this is the way forward. `.gitattributes` is useful for plugins that don't run a build step as a part of the Actions workflow and also allows for GitHub's generated ZIP files to contain the same contents as what is committed to WordPress.org. If you would like to attach a ZIP file with the proper contents that decompresses to a folder name without version number as WordPress generally expects, you can add steps to your workflow that generate the ZIP and attach it to the GitHub release (concrete examples to come). ### Sample baseline files #### `.distignore` **Notes:** `.distignore` is for files to be ignored **only**; it does not currently allow negation like `.gitignore`. This comes from its current expected syntax in WP-CLI's [`wp dist-archive` command](https://github.com/wp-cli/dist-archive-command/). It is possible that this Action will allow for includes via something like a `.distinclude` file in the future, or that WP-CLI itself makes a change that this Action will reflect for consistency. It also will need to contain more than `.gitattributes` because that method **also** respects `.gitignore`. ``` /.wordpress-org /.git /.github /node_modules .distignore .gitignore ``` #### `.gitattributes` ```gitattributes # Directories /.wordpress-org export-ignore /.github export-ignore # Files /.gitattributes export-ignore /.gitignore export-ignore ``` ## Example Workflow File ```yml name: Deploy to WordPress.org on: push: tags: - "*" jobs: tag: name: New tag runs-on: ubuntu-latest steps: - uses: actions/checkout@master - name: Build run: | npm install npm run build - name: WordPress Plugin Deploy uses: 10up/action-wordpress-plugin-deploy@master env: SVN_PASSWORD: ${{ secrets.SVN_PASSWORD }} SVN_USERNAME: ${{ secrets.SVN_USERNAME }} SLUG: my-super-cool-plugin ``` ## Contributing Want to help? Check out our [contributing guidelines](CONTRIBUTING.md) to get started.

## License Our GitHub Actions are available for use and remix under the MIT license. ### ☞ Check out our [collection of WordPress-focused GitHub Actions](https://github.com/10up/actions-wordpress) ================================================ FILE: src/actions/wordpress-plugin-asset-update.md ================================================ --- path: "/action-wordpress-plugin-asset-update" title: "WordPress.org Plugin Readme/Assets Update" github_url: "https://github.com/10up/action-wordpress-plugin-asset-update" author: "10up" subtitle: "Update your plugin readme and assets in the WordPress.org repository outside of new releases" tags: [wordpress,plugin,readme,assets,deploy] --- # WordPress.org Plugin Readme/Assets Update This Action commits any `readme.txt` and WordPress.org-specific assets changes in your specified branch to the WordPress.org plugin repository if no other changes have been made since the last deployment to WordPress.org. This is useful for updating things like screenshots or `Tested up to` separately from functional changes, provided your Git branching methodology avoids changing anything else in the specified branch between functional releases. It is **highly recommended** that you use a stable branch where you only merge readme/asset commits in between larger functional merges that only occur when preparing for a release (often implemented as `master` vs. `develop`). Because the WordPress.org plugin repository shows information from `readme.txt` in the specified `Stable tag`, this Action also attempts to parse out the stable tag from `readme.txt` and deploy to there as well as `trunk`. If your stable tag is `trunk` or a tag that does not exist in the `tags` subfolder, it will skip that part of the update and only update `trunk` and/or `assets`. **Important note:** If your development process leads to a situation where `master` (or other specified branch) only contains changes to `readme.txt` or `assets` since the last sync to the plugin directory and those changes are in preparation for the next release, those changes will go live and potentially be misleading to users. Usage of this Action assumes a fairly traditional Git methodology that involves merging all changes to `master` when functional changes are ready and that this seemingly unlikely situation will therefore not happen in your repo; there are no safeguards against syncing changes based on readme/asset content, as that cannot be predicted. ### ☞ This Action is meant to be used in tandem with our [WordPress.org Plugin Deploy Action](https://github.com/10up/action-wordpress-plugin-deploy) ## Configuration ### Required secrets * `SVN_USERNAME` * `SVN_PASSWORD` [Secrets are set in your repository settings](https://help.github.com/en/articles/virtual-environments-for-github-actions#creating-and-using-secrets-encrypted-variables). They cannot be viewed once stored. ### Optional environment variables * `SLUG` - defaults to the repository name, customizable in case your WordPress repository has a different slug or is capitalized differently. * `ASSETS_DIR` - defaults to `.wordpress-org`, customizable for other locations of WordPress.org plugin repository-specific assets that belong in the top-level `assets` directory (the one on the same level as `trunk`) ## Example Workflow File ```yml name: Plugin asset/readme update on: push: branches: - master jobs: master: name: Push to master runs-on: ubuntu-latest steps: - uses: actions/checkout@master - name: WordPress.org plugin asset/readme update uses: 10up/action-wordpress-plugin-asset-update@master env: SVN_PASSWORD: ${{ secrets.SVN_PASSWORD }} SVN_USERNAME: ${{ secrets.SVN_USERNAME }} ``` ### Known issues * It would be more efficient to additionally use the `paths` filter for the `push` action to reduce the number of runs. So far in testing it is possible to limit it to pushes that include readme/asset files as specified, but not ones that *only* include those files. The Action itself still needs to run as written because it compares the totality of changes in the branch against what's in SVN and not just the contents of the current push. ## Contributing Want to help? Check out our [contributing guidelines](CONTRIBUTING.md) to get started.

## License Our GitHub Actions are available for use and remix under the MIT license. ### ☞ Check out our [collection of WordPress-focused GitHub Actions](https://github.com/10up/actions-wordpress) ================================================ FILE: src/actions/wordpress-pot-generator.md ================================================ --- path: '/wordpress-pot-generator' title: 'WordPress Pot Generator' github_url: 'https://github.com/wpapps/wp-pot-generator' author: 'Varun Sridharan' tags: ['wordpress'] subtitle: 'Generate POT Files for your wordpress Plugin / Theme based on the content inside Github Repo' ---

Licence PRs

# WordPress Pot Generator - ***Github Action*** This Action Generates POT Files for your wordpress Plugin / Theme based on the content inside Github Repo ## Configuration * `SAVE_PATH` - Location / Path to save POT File **Required** * `ITEM_SLUG` - Slug of your WordPress Theme / Plugin Slug **Required** * `DOMAIN` - WordPress Theme / Plugin ***TextDomain*** * `PACKAGE_NAME` - WordPress Theme / Plugin Name * `GITHUB_TOKEN` - you do not need to generate one but you do have to explicitly make it available to the Action * `HEADERS` - Array in JSON format of custom headers which will be added to the POT file. Defaults to empty array. ## Example Workflow File ``` workflow "Deploy" { resolves = ["WordPress Pot Generator"] on = "push" } action "WordPress Pot Generator" { uses = "varunsridharan/wordpress-pot-generator@master" env = { SAVE_PATH = "langs/filename.pot" ITEM_SLUG = "your-textdomain" } secrets = ["GITHUB_TOKEN"] } ``` ================================================ FILE: src/actions/wp-text-domain.md ================================================ --- path: '/wp-text-domain' title: 'WP Text Domain - Github Action' github_url: 'https://github.com/wpapps/wp-text-domain' author: 'Varun Sridharan' tags: ['wordpress'] subtitle: 'Add Text Domain To Your WordPress Plugin / Themes On The Fly' ---

Licence PRs

# WP Text Domain - ***Github Action*** This Action Adds TextDomain To your wordpress Plugin / Theme based on the content inside Github Repo ## Configuration * `DOMAIN` - Slug of your WordPress Theme / Plugin Slug **Required** * `GITHUB_TOKEN` - you do not need to generate one but you do have to explicitly make it available to the Action ## Example Workflow File ``` workflow "Deploy" { resolves = ["WP Text Domain"] on = "push" } action "WP Text Domain" { uses = "wpapps/wp-text-domain@master" env = { DOMAIN = "your-textdomain" } secrets = ["GITHUB_TOKEN"] } ``` ================================================ FILE: src/actions/yarn.md ================================================ --- path: '/yarn' title: 'Yarn' github_url: 'https://github.com/Borales/actions-yarn' author: 'Borales' tags: ['yarn', 'npm'] subtitle: 'This Action for yarn enables arbitrary actions with the yarn command-line client, including testing packages and publishing to a registry.' --- ## Usage An example workflow to build, test, and publish an npm package to the default public registry follows: ```hcl workflow "Build, Test, and Publish" { on = "push" resolves = ["Publish"] } action "Build" { uses = "borales/actions-yarn@master" args = "install" } action "Test" { needs = "Build" uses = "borales/actions-yarn@master" args = "test" } action "Publish" { needs = "Test" uses = "borales/actions-yarn@master" args = "publish --access public" secrets = ["NPM_AUTH_TOKEN"] } ``` ### Secrets - `NPM_AUTH_TOKEN` - **Optional**. The token to use for authentication with the npm registry. Required for `yarn publish` ([more info](https://docs.npmjs.com/getting-started/working_with_tokens)) ### Environment variables - `NPM_REGISTRY_URL` - **Optional**. To specify a registry to authenticate with. Defaults to `registry.npmjs.org` - `NPM_CONFIG_USERCONFIG` - **Optional**. To specify a non-default per-user configuration file. Defaults to `$HOME/.npmrc` ([more info](https://docs.npmjs.com/misc/config#npmrc-files)) #### Example To authenticate with, and publish to, a registry other than `registry.npmjs.org`: ```hcl action "Publish" { uses = "borales/actions-yarn@master" args = "publish --access public" env = { NPM_REGISTRY_URL = "someOtherRegistry.someDomain.net" } secrets = ["NPM_AUTH_TOKEN"] } ``` ================================================ FILE: src/actions/zeit-now.md ================================================ --- path: '/zeit-now' title: 'Zeit Now' github_url: 'https://github.com/actions/zeit-now' author: 'GitHub' tags: [] subtitle: 'This Action wraps the Now CLI to enable common Now commands.' --- ## Usage ```workflow workflow "Deploy on Now" { on = "push" resolves = ["alias"] } action "deploy" { uses = "actions/zeit-now@master" secrets = [ "ZEIT_TOKEN", ] } action "alias" { needs = ["deploy"] uses = "actions/zeit-now@master" args = "alias" secrets = [ "ZEIT_TOKEN", ] } ``` For more examples, visit: [actions/example-zeit-now](https://github.com/actions/example-zeit-now). ### Secrets - `ZEIT_TOKEN` - **Required**. The token to use for authentication with the Zeit Now API ([more info](https://zeit.co/blog/introducing-api-tokens-management)) ## License The Dockerfile and associated scripts and documentation in this project are released under the [MIT License](LICENSE). Container images built with this project include third party materials. See [THIRD_PARTY_NOTICE.md](THIRD_PARTY_NOTICE.md) for details. ================================================ FILE: src/actions/zola-deploy.md ================================================ --- path: '/zola-deploy' title: 'Zola Deploy' github_url: 'https://github.com/shalzz/zola-deploy-action' author: 'shalzz' tags: [] subtitle: 'A GitHub action to automatically build and deploy your zola site to the master branch as GitHub Pages.' --- ## Usage ``` workflow "Build and deploy on push" { on = "push" resolves = ["zola deploy"] } action "zola deploy" { uses = "shalzz/zola-deploy-action@master" secrets = ["TOKEN"] } ``` ## Secrets - `TOKEN`: Personal Access key with the scope `public_repo`, we need this to push the site files back to the repo. ( Actions already provides a `GITHUB_TOKEN` which is an installation token and does not trigger a GitHub Pages builds hence we need a personal access token ) ## Custom Domain If you're using a custom domain for your GitHub Pages site put the CNAME in `static/CNAME` so that zola puts it in the root of the public folder which is where GitHub expects it to be. [zola]: https://github.com/getzola/zola ================================================ FILE: src/components/Action-Card/index.js ================================================ import React from 'react' import urljoin from 'url-join' import { navigate } from 'gatsby' import './styles.css' const AcitonCard = ({ path, title, author, subtitle, github_url } = {}) => { const urlParts = github_url.split('github.com') const repoPath = urlParts[urlParts.length - 1] const starBadgeUrl = `${urljoin( 'https://img.shields.io/github/stars', repoPath )}.svg?style=social` return (
navigate(path)}>
Build

{title}

by {author}

{subtitle}

Read more
) } export default AcitonCard ================================================ FILE: src/components/Action-Card/styles.css ================================================ .action-card { box-shadow: inset 0 0 0 1px #e1e4e8, 0 2px 4px rgba(0, 0, 0, 0.15); margin-bottom: 80px; box-sizing: border-box; margin: 40px 10px; z-index: 1; position: relative; display: flex; flex-direction: column; width: 100%; } .action-card__container.column { display: flex; } .action-card:hover { cursor: pointer; } .action-card:before { background: #f6f8fa; border-radius: 50%; box-shadow: 0 0 0 1px #e1e4e8; content: ''; display: block; height: 34px; left: 50%; margin: 0 0 0 -17px; position: absolute; top: -17px; width: 34px; z-index: -1; } .action-card span { color: #0366d6; } .action-card__header { background: #f6f8fa; padding: 24px 100px 24px 32px; border-radius: 6px 6px 0 0; box-shadow: inset 0 0 0 1px #e1e4e8; } .action-card__body { padding: 32px; height: 100%; } .action-card-icon { background: #0366d6; border-radius: 50%; height: 60px; width: 60px; text-align: center !important; margin: 15px 15px 0 0; position: absolute; right: 10px; } .action-card-icon * { top: 50%; transform: translateY(50%); } .action-card__footer { box-shadow: inset 0 1px 0 0 #e1e4e8; text-align: right; padding: 24px 32px; } .action-card__header img { width: 100px; margin-bottom: 0; } .action-card:after { background: #fff; bottom: -20px; content: ''; display: block; height: 45px; left: 50%; margin: 0 0 0 -23px; position: absolute; width: 46px; box-shadow: inset 0 0 0 1px #e1e4e8, 0 2px 4px rgba(0, 0, 0, 0.15); z-index: 0; border-radius: 50%; } .content .action-card__header h4 { margin: 0; padding: 0; } .action-card__header p { font-size: 18px; } ================================================ FILE: src/components/ActionHeader/index.js ================================================ import React from 'react' import urljoin from 'url-join' const ActionHeader = ({ title, github_url, author }) => { return (

{title}

By {author}

) } export default ActionHeader ================================================ FILE: src/components/Footer/index.js ================================================ import React from 'react' import './styles.css' const Footer = () => { return ( ) } export default Footer ================================================ FILE: src/components/Footer/styles.css ================================================ footer p { margin-bottom: 10px; } .footer { color: #797676; font-size: 1.3em; padding: 3rem 1.5rem 3rem !important; } .footer svg { vertical-align: middle; } ================================================ FILE: src/components/Navigation/index.js ================================================ import React from 'react' import './styles.css' const Navigation = () => { return ( ) } export default Navigation ================================================ FILE: src/components/Navigation/styles.css ================================================ nav.navbar { background: #423a3a; color: white; padding: 0 70px; } nav.navbar h1, nav.navbar a { color: white; float: right; } ================================================ FILE: src/components/SiteHeader/index.js ================================================ import React from 'react' const SiteHeader = ({ handleFilter, count }) => { return (

GitHub Actions

Built to help developers find GitHub Actions.

Add an action

Currently listing {count} actions and counting...

) } export default SiteHeader ================================================ FILE: src/components/layout.css ================================================ html { font-family: sans-serif; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; } body { margin: 0; } article, aside, details, figcaption, figure, footer, header, main, menu, nav, section, summary { display: block; } audio, canvas, progress, video { display: inline-block; } audio:not([controls]) { display: none; height: 0; } progress { vertical-align: baseline; } [hidden], template { display: none; } a { background-color: transparent; -webkit-text-decoration-skip: objects; } a:active, a:hover { outline-width: 0; } abbr[title] { border-bottom: none; text-decoration: underline; text-decoration: underline dotted; } b, strong { font-weight: inherit; font-weight: bolder; } dfn { font-style: italic; } h1 { font-size: 2em; margin: 0.67em 0; } mark { background-color: #ff0; color: #000; } small { font-size: 80%; } sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sub { bottom: -0.25em; } sup { top: -0.5em; } img { border-style: none; } svg:not(:root) { overflow: hidden; } code, kbd, pre, samp { font-family: monospace, monospace; font-size: 1em; } figure { margin: 1em 40px; } hr { box-sizing: content-box; height: 0; overflow: visible; } button, input, optgroup, select, textarea { font: inherit; margin: 0; } optgroup { font-weight: 700; } button, input { overflow: visible; } button, select { text-transform: none; } [type='reset'], [type='submit'], button, html [type='button'] { -webkit-appearance: button; } [type='button']::-moz-focus-inner, [type='reset']::-moz-focus-inner, [type='submit']::-moz-focus-inner, button::-moz-focus-inner { border-style: none; padding: 0; } [type='button']:-moz-focusring, [type='reset']:-moz-focusring, [type='submit']:-moz-focusring, button:-moz-focusring { outline: 1px dotted ButtonText; } fieldset { border: 1px solid silver; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } legend { box-sizing: border-box; color: inherit; display: table; max-width: 100%; padding: 0; white-space: normal; } textarea { overflow: auto; } [type='checkbox'], [type='radio'] { box-sizing: border-box; padding: 0; } [type='number']::-webkit-inner-spin-button, [type='number']::-webkit-outer-spin-button { height: auto; } [type='search'] { -webkit-appearance: textfield; outline-offset: -2px; } [type='search']::-webkit-search-cancel-button, [type='search']::-webkit-search-decoration { -webkit-appearance: none; } ::-webkit-input-placeholder { color: inherit; opacity: 0.54; } ::-webkit-file-upload-button { -webkit-appearance: button; font: inherit; } html { font: 112.5%/1.45em georgia, serif; box-sizing: border-box; overflow-y: scroll; } * { box-sizing: inherit; } *:before { box-sizing: inherit; } *:after { box-sizing: inherit; } body { color: hsla(0, 0%, 0%, 0.8); font-family: georgia, serif; font-weight: normal; word-wrap: break-word; font-kerning: normal; -moz-font-feature-settings: 'kern', 'liga', 'clig', 'calt'; -ms-font-feature-settings: 'kern', 'liga', 'clig', 'calt'; -webkit-font-feature-settings: 'kern', 'liga', 'clig', 'calt'; font-feature-settings: 'kern', 'liga', 'clig', 'calt'; } img { max-width: 100%; margin-left: 0; margin-right: 0; margin-top: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; padding-top: 0; margin-bottom: 1.45rem; } h1 { margin-left: 0; margin-right: 0; margin-top: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; padding-top: 0; margin-bottom: 1.45rem; color: inherit; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-weight: bold; text-rendering: optimizeLegibility; font-size: 2.25rem; line-height: 1.1; } h2 { margin-left: 0; margin-right: 0; margin-top: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; padding-top: 0; margin-bottom: 1.45rem; color: #525252; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-weight: bold; text-rendering: optimizeLegibility; font-size: 1.62671rem; line-height: 1.1; } h3 { margin-left: 0; margin-right: 0; margin-top: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; padding-top: 0; margin-bottom: 1.45rem; color: inherit; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-weight: bold; text-rendering: optimizeLegibility; font-size: 1.38316rem; line-height: 1.1; } h4 { margin-left: 0; margin-right: 0; margin-top: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; padding-top: 0; margin-bottom: 1.45rem; color: inherit; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-weight: bold; text-rendering: optimizeLegibility; font-size: 1rem; line-height: 1.1; } h5 { margin-left: 0; margin-right: 0; margin-top: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; padding-top: 0; margin-bottom: 1.45rem; color: inherit; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-weight: bold; text-rendering: optimizeLegibility; font-size: 0.85028rem; line-height: 1.1; } h6 { margin-left: 0; margin-right: 0; margin-top: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; padding-top: 0; margin-bottom: 1.45rem; color: inherit; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-weight: bold; text-rendering: optimizeLegibility; font-size: 0.78405rem; line-height: 1.1; } hgroup { margin-left: 0; margin-right: 0; margin-top: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; padding-top: 0; margin-bottom: 1.45rem; } ul { margin-left: 1.45rem; margin-right: 0; margin-top: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; padding-top: 0; margin-bottom: 1.45rem; list-style-position: outside; list-style-image: none; } ol { margin-left: 1.45rem; margin-right: 0; margin-top: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; padding-top: 0; margin-bottom: 1.45rem; list-style-position: outside; list-style-image: none; } dl { margin-left: 0; margin-right: 0; margin-top: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; padding-top: 0; margin-bottom: 1.45rem; } dd { margin-left: 0; margin-right: 0; margin-top: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; padding-top: 0; margin-bottom: 1.45rem; } p { margin-left: 0; margin-right: 0; margin-top: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; padding-top: 0; margin-bottom: 1.45rem; color: ##525252; } figure { margin-left: 0; margin-right: 0; margin-top: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; padding-top: 0; margin-bottom: 1.45rem; } pre { margin-left: 0; margin-right: 0; margin-top: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; padding-top: 0; margin-bottom: 1.45rem; font-size: 0.85rem; line-height: 1.42; background: hsla(0, 0%, 0%, 0.04); border-radius: 3px; overflow: auto; word-wrap: normal; padding: 1.45rem; } table { margin-left: 0; margin-right: 0; margin-top: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; padding-top: 0; margin-bottom: 1.45rem; font-size: 1rem; line-height: 1.45rem; border-collapse: collapse; width: 100%; } fieldset { margin-left: 0; margin-right: 0; margin-top: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; padding-top: 0; margin-bottom: 1.45rem; } blockquote { margin-left: 1.45rem; margin-right: 1.45rem; margin-top: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; padding-top: 0; margin-bottom: 1.45rem; } form { margin-left: 0; margin-right: 0; margin-top: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; padding-top: 0; margin-bottom: 1.45rem; } noscript { margin-left: 0; margin-right: 0; margin-top: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; padding-top: 0; margin-bottom: 1.45rem; } iframe { margin-left: 0; margin-right: 0; margin-top: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; padding-top: 0; margin-bottom: 1.45rem; } hr { margin-left: 0; margin-right: 0; margin-top: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; padding-top: 0; margin-bottom: calc(1.45rem - 1px); background: hsla(0, 0%, 0%, 0.2); border: none; height: 1px; } address { margin-left: 0; margin-right: 0; margin-top: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; padding-top: 0; margin-bottom: 1.45rem; } b { font-weight: bold; } strong { font-weight: bold; } dt { font-weight: bold; } th { font-weight: bold; } li { margin-bottom: calc(1.45rem / 2); } ol li { padding-left: 0; } ul li { padding-left: 0; } li > ol { margin-left: 1.45rem; margin-bottom: calc(1.45rem / 2); margin-top: calc(1.45rem / 2); } li > ul { margin-left: 1.45rem; margin-bottom: calc(1.45rem / 2); margin-top: calc(1.45rem / 2); } blockquote *:last-child { margin-bottom: 0; } li *:last-child { margin-bottom: 0; } p *:last-child { margin-bottom: 0; } li > p { margin-bottom: calc(1.45rem / 2); } code { font-size: 0.85rem; line-height: 1.45rem; } kbd { font-size: 0.85rem; line-height: 1.45rem; } samp { font-size: 0.85rem; line-height: 1.45rem; } abbr { border-bottom: 1px dotted hsla(0, 0%, 0%, 0.5); cursor: help; } acronym { border-bottom: 1px dotted hsla(0, 0%, 0%, 0.5); cursor: help; } abbr[title] { border-bottom: 1px dotted hsla(0, 0%, 0%, 0.5); cursor: help; text-decoration: none; } thead { text-align: left; } td, th { text-align: left; border-bottom: 1px solid hsla(0, 0%, 0%, 0.12); font-feature-settings: 'tnum'; -moz-font-feature-settings: 'tnum'; -ms-font-feature-settings: 'tnum'; -webkit-font-feature-settings: 'tnum'; padding-left: 0.96667rem; padding-right: 0.96667rem; padding-top: 0.725rem; padding-bottom: calc(0.725rem - 1px); } th:first-child, td:first-child { padding-left: 0; } th:last-child, td:last-child { padding-right: 0; } tt, code { background-color: hsla(0, 0%, 0%, 0.04); border-radius: 3px; font-family: 'SFMono-Regular', Consolas, 'Roboto Mono', 'Droid Sans Mono', 'Liberation Mono', Menlo, Courier, monospace; padding: 0; padding-top: 0.2em; padding-bottom: 0.2em; } pre code { background: none; line-height: 1.42; } code:before, code:after, tt:before, tt:after { letter-spacing: -0.2em; content: ' '; } pre code:before, pre code:after, pre tt:before, pre tt:after { content: ''; } @media only screen and (max-width: 480px) { html { font-size: 100%; } } .main .input { width: 50%; margin-top: 30px; color: #2e70e3; } .main .button { margin: 40px 0; } .main .title { color: #ffffff; font-size: 3.5rem; } .main .subtitle { color: white; font-size: 2rem; margin-bottom: 0 !important; } .main p { font-style: italic; margin: 0; /* margin-bottom: 20px; */ } .main.hero .badges { margin-top: 15px; } .main.hero .badges img { margin-right: 5px; } @media (max-width: 500px) { .main .title { font-size: 2rem; } .main .subtitle { font-size: 1.5rem; } .main .input { width: 100%; font-size: 1rem; } .main .input::placeholder { font-size: 1rem; } .main .button.is-large { font-size: 1.2rem; } } .badges .badges__twitter { width: 75px; } .badges .badges__github { width: 100px; } .button.add-action { color: #3273dc; } .button.add-action i { margin-right: 10px; } .content { min-height: 100vh; } .mt10 { margin-top: 10px; } .mt20 { margin-top: 20px; } .hero { background: #4776e6; /* fallback for old browsers */ background: -webkit-linear-gradient( to right, #8e54e9, #4776e6 ); /* Chrome 10-25, Safari 5.1-6 */ background: linear-gradient( to right, #8e54e9, #4776e6 ); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ } .no-results { text-align: center; width: 100%; margin-top: 40px; } .content .no-results h1 { color: #b7b7b7; } ================================================ FILE: src/components/layout.js ================================================ import React from 'react' import PropTypes from 'prop-types' import Helmet from 'react-helmet' import { StaticQuery, graphql, Link } from 'gatsby' import Navigation from './Navigation' import Footer from './Footer' import './layout.css' const Layout = ({ children, count, handleFilter = () => {}, header }) => ( ( <>