├── .gitignore ├── README.md ├── avatars ├── custom │ ├── a.png │ ├── ad.png │ ├── ads.png │ ├── aloha.png │ ├── apism.png │ ├── askew.png │ ├── azoic.png │ ├── bacon.png │ ├── bar.png │ ├── bason.png │ ├── baz.png │ ├── bids.png │ ├── casco.png │ ├── d.png │ ├── doggo.png │ ├── doob.png │ ├── e.png │ ├── eik.png │ ├── emmas.png │ ├── eros.png │ ├── evo.png │ ├── feel.png │ ├── fjeld.png │ ├── gleam.png │ ├── hatch.png │ ├── heme.png │ ├── howls.png │ ├── i.png │ ├── kas.png │ ├── keech.png │ ├── leave.png │ ├── leves.png │ ├── lilt.png │ ├── loto.png │ ├── loud.png │ ├── lyne.png │ ├── males.png │ ├── mash.png │ ├── matzo.png │ ├── mihi.png │ ├── modus.png │ ├── muir.png │ ├── n.png │ ├── namus.png │ ├── net.png │ ├── nied.png │ ├── pappi.png │ ├── patte.png │ ├── peak.png │ ├── peat.png │ ├── piki.png │ ├── pom.png │ ├── preps.png │ ├── raid.png │ ├── recal.png │ ├── rem.png │ ├── retch.png │ ├── rimy.png │ ├── rip.png │ ├── rubes.png │ ├── sassy.png │ ├── septa.png │ ├── shred.png │ ├── smits.png │ ├── smug.png │ ├── snook.png │ ├── sods.png │ ├── softa.png │ ├── stop.png │ ├── susu.png │ ├── tacan.png │ ├── take.png │ ├── tipt.png │ ├── tup.png │ ├── twp.png │ ├── ungot.png │ ├── unwed.png │ ├── v.png │ ├── vatic.png │ ├── veto.png │ ├── vexil.png │ ├── waw.png │ ├── whet.png │ ├── wites.png │ ├── xerus.png │ ├── yore.png │ ├── zeke.png │ ├── zel.png │ └── zila.png └── default │ ├── abrim.png │ ├── adits.png │ ├── afro.png │ ├── agoge.png │ ├── alapa.png │ ├── amice.png │ ├── ark.png │ ├── aroha.png │ ├── aura.png │ ├── awner.png │ ├── balky.png │ ├── bewig.png │ ├── bito.png │ ├── bitos.png │ ├── bley.png │ ├── blow.png │ ├── bonus.png │ ├── brens.png │ ├── cava.png │ ├── chaya.png │ ├── cheek.png │ ├── deely.png │ ├── domed.png │ ├── draff.png │ ├── dynes.png │ ├── dzho.png │ ├── edema.png │ ├── eger.png │ ├── exeat.png │ ├── exes.png │ ├── few.png │ ├── flab.png │ ├── fogs.png │ ├── foo.png │ ├── fraus.png │ ├── fuffy.png │ ├── gaes.png │ ├── gaid.png │ ├── garbe.png │ ├── glitz.png │ ├── goer.png │ ├── hough.png │ ├── hyla.png │ ├── ick.png │ ├── inula.png │ ├── isled.png │ ├── jehad.png │ ├── kayo.png │ ├── kofta.png │ ├── kulfi.png │ ├── laker.png │ ├── lath.png │ ├── laxer.png │ ├── leet.png │ ├── lend.png │ ├── lorry.png │ ├── luke.png │ ├── mairs.png │ ├── midgy.png │ ├── mires.png │ ├── missa.png │ ├── mobby.png │ ├── mony.png │ ├── moobs.png │ ├── nevel.png │ ├── newed.png │ ├── oozes.png │ ├── ossa.png │ ├── pert.png │ ├── pheer.png │ ├── pooed.png │ ├── poofs.png │ ├── prong.png │ ├── pull.png │ ├── pygmy.png │ ├── rend.png │ ├── rink.png │ ├── rote.png │ ├── runed.png │ ├── saist.png │ ├── santo.png │ ├── saxe.png │ ├── self.png │ ├── setup.png │ ├── shmek.png │ ├── skis.png │ ├── snaws.png │ ├── soms.png │ ├── sophs.png │ ├── spewy.png │ ├── succi.png │ ├── suqs.png │ ├── swobs.png │ ├── talas.png │ ├── taler.png │ ├── teals.png │ ├── theek.png │ ├── thuds.png │ ├── ticks.png │ ├── torn.png │ ├── trick.png │ ├── trunk.png │ ├── turme.png │ ├── typy.png │ ├── vent.png │ ├── vets.png │ ├── weed.png │ ├── wersh.png │ ├── wizes.png │ ├── yawny.png │ └── yorp.png ├── cog.yaml ├── model.pkl ├── notebook.ipynb ├── notebook_v2.ipynb ├── package-lock.json ├── package.json ├── predict.py ├── preprocess.py ├── script ├── build ├── collect.js ├── start └── test └── smoke-tests ├── andreasjansson.png └── default.png /.gitignore: -------------------------------------------------------------------------------- 1 | .cog 2 | .ipynb_checkpoints 3 | *.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # GitHub Avatars 2 | 3 | A machine learning model to differentiate default GitHub avatars from custom ones. 4 | 5 | | example default avatar | example custom avatar | 6 | | ------- | ------ | 7 | | ![default](avatars/default/abrim.png) | ![custom](avatars/custom/zeke.png) | 8 | 9 | 10 | ## Development 11 | 12 | First, install [Cog](https://github.com/replicate/cog#install). Then: 13 | 14 | ``` 15 | script/start 16 | ``` 17 | 18 | Jupyter will output a URL to visit in your browser. 19 | 20 | ## Build 21 | 22 | Saving any changes you've made to the notebook. 23 | 24 | If you've never run the build before: 25 | 26 | ``` 27 | cog build 28 | ``` 29 | 30 | Then: 31 | 32 | ``` 33 | script/build 34 | ``` 35 | 36 | This will convert the notebook to a python script and build the cog image. 37 | 38 | ## Usage 39 | 40 | ### Training 41 | 42 | Run the notebook, and run all the cells. This will output an updated `model.pkl`. 43 | 44 | ### Predicting 45 | 46 | Call `cog predict` and specify a GitHub username as input to get a prediction: 47 | 48 | ``` 49 | cog predict -i username=zeke 50 | ``` 51 | 52 | You should see output like this: 53 | 54 | ```json 55 | { 56 | "username": "zeke", 57 | "href": "https://github.com/zeke.png", 58 | "prediction": "custom" 59 | } 60 | ``` 61 | 62 | --- 63 | 64 | ## Notes 65 | 66 | - Start with scikit-learn. Then maybe use torch. 67 | - scikit-learn is easy to start. If it works, great! Otherwise we can switch to torch and use scikit-learn implementation as a baseline. 68 | - It's easy to make bugs in torch 69 | - It's harder to make bugs in scikit 70 | 71 | ### Approach (v1) 72 | 73 | Create a color histogram for each image by reducing it to 8 bit (or 4 bit, or 3). Traditional learning models suffer from the "curse of dimensionality", wherein the higher the dimensionality, the harder to learn. (Not so for deep learning). 768 values (256 * 3) is actually quite a lot of dimensions for a small dataset. There is a connection between the size of dataset and inputs. For small datasets, one should use fewer inputs. 74 | 75 | 1. create a data pipeline that reads in images 76 | 1. input is image and a label (default or not) 77 | 1. output is a 24-valued histogram plus the label 78 | 79 | 80 | ### Notes, January 2022 81 | 82 | Feature Engineering is a process of manually constructing features that suit that task at hand. Our current feature is a color histogram, counting the number of colors in each image. But we could also contruct features in a different way, for example coundting the number of unique colors in each image. 83 | 84 | Feature engineering is common in traditional ML, but in deep learning the emphasis is more on the learning of the model itself, rather than the learning of the features. Specifically, finding the right model architecture. Feature engineering isn't really used any more. 85 | 86 | Today we'll focus on understanding why the model makes the deicsions it makes, based on the features we've constructed, and hopefully improve our feature engineering step based on what we learn. 87 | 88 | ### Approach (v2) 89 | 90 | v1 was flawed, in our quantizing process caused the "github grey" color to be bucketed along with "white", leading to some custom avatars being misidentified as default avatars. 91 | 92 | In this new version, we'll create a new feature vector using: 93 | 94 | - the number of "GitHub grey" pixels in the image 95 | - the number of distinct colors in the image 96 | 97 | 98 | -------------------------------------------------------------------------------- /avatars/custom/a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/a.png -------------------------------------------------------------------------------- /avatars/custom/ad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/ad.png -------------------------------------------------------------------------------- /avatars/custom/ads.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/ads.png -------------------------------------------------------------------------------- /avatars/custom/aloha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/aloha.png -------------------------------------------------------------------------------- /avatars/custom/apism.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/apism.png -------------------------------------------------------------------------------- /avatars/custom/askew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/askew.png -------------------------------------------------------------------------------- /avatars/custom/azoic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/azoic.png -------------------------------------------------------------------------------- /avatars/custom/bacon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/bacon.png -------------------------------------------------------------------------------- /avatars/custom/bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/bar.png -------------------------------------------------------------------------------- /avatars/custom/bason.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/bason.png -------------------------------------------------------------------------------- /avatars/custom/baz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/baz.png -------------------------------------------------------------------------------- /avatars/custom/bids.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/bids.png -------------------------------------------------------------------------------- /avatars/custom/casco.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/casco.png -------------------------------------------------------------------------------- /avatars/custom/d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/d.png -------------------------------------------------------------------------------- /avatars/custom/doggo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/doggo.png -------------------------------------------------------------------------------- /avatars/custom/doob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/doob.png -------------------------------------------------------------------------------- /avatars/custom/e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/e.png -------------------------------------------------------------------------------- /avatars/custom/eik.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/eik.png -------------------------------------------------------------------------------- /avatars/custom/emmas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/emmas.png -------------------------------------------------------------------------------- /avatars/custom/eros.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/eros.png -------------------------------------------------------------------------------- /avatars/custom/evo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/evo.png -------------------------------------------------------------------------------- /avatars/custom/feel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/feel.png -------------------------------------------------------------------------------- /avatars/custom/fjeld.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/fjeld.png -------------------------------------------------------------------------------- /avatars/custom/gleam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/gleam.png -------------------------------------------------------------------------------- /avatars/custom/hatch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/hatch.png -------------------------------------------------------------------------------- /avatars/custom/heme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/heme.png -------------------------------------------------------------------------------- /avatars/custom/howls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/howls.png -------------------------------------------------------------------------------- /avatars/custom/i.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/i.png -------------------------------------------------------------------------------- /avatars/custom/kas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/kas.png -------------------------------------------------------------------------------- /avatars/custom/keech.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/keech.png -------------------------------------------------------------------------------- /avatars/custom/leave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/leave.png -------------------------------------------------------------------------------- /avatars/custom/leves.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/leves.png -------------------------------------------------------------------------------- /avatars/custom/lilt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/lilt.png -------------------------------------------------------------------------------- /avatars/custom/loto.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/loto.png -------------------------------------------------------------------------------- /avatars/custom/loud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/loud.png -------------------------------------------------------------------------------- /avatars/custom/lyne.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/lyne.png -------------------------------------------------------------------------------- /avatars/custom/males.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/males.png -------------------------------------------------------------------------------- /avatars/custom/mash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/mash.png -------------------------------------------------------------------------------- /avatars/custom/matzo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/matzo.png -------------------------------------------------------------------------------- /avatars/custom/mihi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/mihi.png -------------------------------------------------------------------------------- /avatars/custom/modus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/modus.png -------------------------------------------------------------------------------- /avatars/custom/muir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/muir.png -------------------------------------------------------------------------------- /avatars/custom/n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/n.png -------------------------------------------------------------------------------- /avatars/custom/namus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/namus.png -------------------------------------------------------------------------------- /avatars/custom/net.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/net.png -------------------------------------------------------------------------------- /avatars/custom/nied.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/nied.png -------------------------------------------------------------------------------- /avatars/custom/pappi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/pappi.png -------------------------------------------------------------------------------- /avatars/custom/patte.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/patte.png -------------------------------------------------------------------------------- /avatars/custom/peak.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/peak.png -------------------------------------------------------------------------------- /avatars/custom/peat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/peat.png -------------------------------------------------------------------------------- /avatars/custom/piki.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/piki.png -------------------------------------------------------------------------------- /avatars/custom/pom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/pom.png -------------------------------------------------------------------------------- /avatars/custom/preps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/preps.png -------------------------------------------------------------------------------- /avatars/custom/raid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/raid.png -------------------------------------------------------------------------------- /avatars/custom/recal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/recal.png -------------------------------------------------------------------------------- /avatars/custom/rem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/rem.png -------------------------------------------------------------------------------- /avatars/custom/retch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/retch.png -------------------------------------------------------------------------------- /avatars/custom/rimy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/rimy.png -------------------------------------------------------------------------------- /avatars/custom/rip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/rip.png -------------------------------------------------------------------------------- /avatars/custom/rubes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/rubes.png -------------------------------------------------------------------------------- /avatars/custom/sassy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/sassy.png -------------------------------------------------------------------------------- /avatars/custom/septa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/septa.png -------------------------------------------------------------------------------- /avatars/custom/shred.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/shred.png -------------------------------------------------------------------------------- /avatars/custom/smits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/smits.png -------------------------------------------------------------------------------- /avatars/custom/smug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/smug.png -------------------------------------------------------------------------------- /avatars/custom/snook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/snook.png -------------------------------------------------------------------------------- /avatars/custom/sods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/sods.png -------------------------------------------------------------------------------- /avatars/custom/softa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/softa.png -------------------------------------------------------------------------------- /avatars/custom/stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/stop.png -------------------------------------------------------------------------------- /avatars/custom/susu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/susu.png -------------------------------------------------------------------------------- /avatars/custom/tacan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/tacan.png -------------------------------------------------------------------------------- /avatars/custom/take.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/take.png -------------------------------------------------------------------------------- /avatars/custom/tipt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/tipt.png -------------------------------------------------------------------------------- /avatars/custom/tup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/tup.png -------------------------------------------------------------------------------- /avatars/custom/twp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/twp.png -------------------------------------------------------------------------------- /avatars/custom/ungot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/ungot.png -------------------------------------------------------------------------------- /avatars/custom/unwed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/unwed.png -------------------------------------------------------------------------------- /avatars/custom/v.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/v.png -------------------------------------------------------------------------------- /avatars/custom/vatic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/vatic.png -------------------------------------------------------------------------------- /avatars/custom/veto.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/veto.png -------------------------------------------------------------------------------- /avatars/custom/vexil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/vexil.png -------------------------------------------------------------------------------- /avatars/custom/waw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/waw.png -------------------------------------------------------------------------------- /avatars/custom/whet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/whet.png -------------------------------------------------------------------------------- /avatars/custom/wites.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/wites.png -------------------------------------------------------------------------------- /avatars/custom/xerus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/xerus.png -------------------------------------------------------------------------------- /avatars/custom/yore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/yore.png -------------------------------------------------------------------------------- /avatars/custom/zeke.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/zeke.png -------------------------------------------------------------------------------- /avatars/custom/zel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/zel.png -------------------------------------------------------------------------------- /avatars/custom/zila.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/custom/zila.png -------------------------------------------------------------------------------- /avatars/default/abrim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/abrim.png -------------------------------------------------------------------------------- /avatars/default/adits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/adits.png -------------------------------------------------------------------------------- /avatars/default/afro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/afro.png -------------------------------------------------------------------------------- /avatars/default/agoge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/agoge.png -------------------------------------------------------------------------------- /avatars/default/alapa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/alapa.png -------------------------------------------------------------------------------- /avatars/default/amice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/amice.png -------------------------------------------------------------------------------- /avatars/default/ark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/ark.png -------------------------------------------------------------------------------- /avatars/default/aroha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/aroha.png -------------------------------------------------------------------------------- /avatars/default/aura.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/aura.png -------------------------------------------------------------------------------- /avatars/default/awner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/awner.png -------------------------------------------------------------------------------- /avatars/default/balky.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/balky.png -------------------------------------------------------------------------------- /avatars/default/bewig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/bewig.png -------------------------------------------------------------------------------- /avatars/default/bito.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/bito.png -------------------------------------------------------------------------------- /avatars/default/bitos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/bitos.png -------------------------------------------------------------------------------- /avatars/default/bley.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/bley.png -------------------------------------------------------------------------------- /avatars/default/blow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/blow.png -------------------------------------------------------------------------------- /avatars/default/bonus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/bonus.png -------------------------------------------------------------------------------- /avatars/default/brens.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/brens.png -------------------------------------------------------------------------------- /avatars/default/cava.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/cava.png -------------------------------------------------------------------------------- /avatars/default/chaya.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/chaya.png -------------------------------------------------------------------------------- /avatars/default/cheek.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/cheek.png -------------------------------------------------------------------------------- /avatars/default/deely.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/deely.png -------------------------------------------------------------------------------- /avatars/default/domed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/domed.png -------------------------------------------------------------------------------- /avatars/default/draff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/draff.png -------------------------------------------------------------------------------- /avatars/default/dynes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/dynes.png -------------------------------------------------------------------------------- /avatars/default/dzho.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/dzho.png -------------------------------------------------------------------------------- /avatars/default/edema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/edema.png -------------------------------------------------------------------------------- /avatars/default/eger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/eger.png -------------------------------------------------------------------------------- /avatars/default/exeat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/exeat.png -------------------------------------------------------------------------------- /avatars/default/exes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/exes.png -------------------------------------------------------------------------------- /avatars/default/few.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/few.png -------------------------------------------------------------------------------- /avatars/default/flab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/flab.png -------------------------------------------------------------------------------- /avatars/default/fogs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/fogs.png -------------------------------------------------------------------------------- /avatars/default/foo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/foo.png -------------------------------------------------------------------------------- /avatars/default/fraus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/fraus.png -------------------------------------------------------------------------------- /avatars/default/fuffy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/fuffy.png -------------------------------------------------------------------------------- /avatars/default/gaes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/gaes.png -------------------------------------------------------------------------------- /avatars/default/gaid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/gaid.png -------------------------------------------------------------------------------- /avatars/default/garbe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/garbe.png -------------------------------------------------------------------------------- /avatars/default/glitz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/glitz.png -------------------------------------------------------------------------------- /avatars/default/goer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/goer.png -------------------------------------------------------------------------------- /avatars/default/hough.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/hough.png -------------------------------------------------------------------------------- /avatars/default/hyla.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/hyla.png -------------------------------------------------------------------------------- /avatars/default/ick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/ick.png -------------------------------------------------------------------------------- /avatars/default/inula.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/inula.png -------------------------------------------------------------------------------- /avatars/default/isled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/isled.png -------------------------------------------------------------------------------- /avatars/default/jehad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/jehad.png -------------------------------------------------------------------------------- /avatars/default/kayo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/kayo.png -------------------------------------------------------------------------------- /avatars/default/kofta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/kofta.png -------------------------------------------------------------------------------- /avatars/default/kulfi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/kulfi.png -------------------------------------------------------------------------------- /avatars/default/laker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/laker.png -------------------------------------------------------------------------------- /avatars/default/lath.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/lath.png -------------------------------------------------------------------------------- /avatars/default/laxer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/laxer.png -------------------------------------------------------------------------------- /avatars/default/leet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/leet.png -------------------------------------------------------------------------------- /avatars/default/lend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/lend.png -------------------------------------------------------------------------------- /avatars/default/lorry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/lorry.png -------------------------------------------------------------------------------- /avatars/default/luke.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/luke.png -------------------------------------------------------------------------------- /avatars/default/mairs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/mairs.png -------------------------------------------------------------------------------- /avatars/default/midgy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/midgy.png -------------------------------------------------------------------------------- /avatars/default/mires.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/mires.png -------------------------------------------------------------------------------- /avatars/default/missa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/missa.png -------------------------------------------------------------------------------- /avatars/default/mobby.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/mobby.png -------------------------------------------------------------------------------- /avatars/default/mony.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/mony.png -------------------------------------------------------------------------------- /avatars/default/moobs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/moobs.png -------------------------------------------------------------------------------- /avatars/default/nevel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/nevel.png -------------------------------------------------------------------------------- /avatars/default/newed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/newed.png -------------------------------------------------------------------------------- /avatars/default/oozes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/oozes.png -------------------------------------------------------------------------------- /avatars/default/ossa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/ossa.png -------------------------------------------------------------------------------- /avatars/default/pert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/pert.png -------------------------------------------------------------------------------- /avatars/default/pheer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/pheer.png -------------------------------------------------------------------------------- /avatars/default/pooed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/pooed.png -------------------------------------------------------------------------------- /avatars/default/poofs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/poofs.png -------------------------------------------------------------------------------- /avatars/default/prong.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/prong.png -------------------------------------------------------------------------------- /avatars/default/pull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/pull.png -------------------------------------------------------------------------------- /avatars/default/pygmy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/pygmy.png -------------------------------------------------------------------------------- /avatars/default/rend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/rend.png -------------------------------------------------------------------------------- /avatars/default/rink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/rink.png -------------------------------------------------------------------------------- /avatars/default/rote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/rote.png -------------------------------------------------------------------------------- /avatars/default/runed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/runed.png -------------------------------------------------------------------------------- /avatars/default/saist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/saist.png -------------------------------------------------------------------------------- /avatars/default/santo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/santo.png -------------------------------------------------------------------------------- /avatars/default/saxe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/saxe.png -------------------------------------------------------------------------------- /avatars/default/self.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/self.png -------------------------------------------------------------------------------- /avatars/default/setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/setup.png -------------------------------------------------------------------------------- /avatars/default/shmek.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/shmek.png -------------------------------------------------------------------------------- /avatars/default/skis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/skis.png -------------------------------------------------------------------------------- /avatars/default/snaws.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/snaws.png -------------------------------------------------------------------------------- /avatars/default/soms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/soms.png -------------------------------------------------------------------------------- /avatars/default/sophs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/sophs.png -------------------------------------------------------------------------------- /avatars/default/spewy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/spewy.png -------------------------------------------------------------------------------- /avatars/default/succi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/succi.png -------------------------------------------------------------------------------- /avatars/default/suqs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/suqs.png -------------------------------------------------------------------------------- /avatars/default/swobs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/swobs.png -------------------------------------------------------------------------------- /avatars/default/talas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/talas.png -------------------------------------------------------------------------------- /avatars/default/taler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/taler.png -------------------------------------------------------------------------------- /avatars/default/teals.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/teals.png -------------------------------------------------------------------------------- /avatars/default/theek.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/theek.png -------------------------------------------------------------------------------- /avatars/default/thuds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/thuds.png -------------------------------------------------------------------------------- /avatars/default/ticks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/ticks.png -------------------------------------------------------------------------------- /avatars/default/torn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/torn.png -------------------------------------------------------------------------------- /avatars/default/trick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/trick.png -------------------------------------------------------------------------------- /avatars/default/trunk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/trunk.png -------------------------------------------------------------------------------- /avatars/default/turme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/turme.png -------------------------------------------------------------------------------- /avatars/default/typy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/typy.png -------------------------------------------------------------------------------- /avatars/default/vent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/vent.png -------------------------------------------------------------------------------- /avatars/default/vets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/vets.png -------------------------------------------------------------------------------- /avatars/default/weed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/weed.png -------------------------------------------------------------------------------- /avatars/default/wersh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/wersh.png -------------------------------------------------------------------------------- /avatars/default/wizes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/wizes.png -------------------------------------------------------------------------------- /avatars/default/yawny.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/yawny.png -------------------------------------------------------------------------------- /avatars/default/yorp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/avatars/default/yorp.png -------------------------------------------------------------------------------- /cog.yaml: -------------------------------------------------------------------------------- 1 | build: 2 | gpu: false 3 | 4 | system_packages: 5 | - "libgl1-mesa-glx" 6 | - "libglib2.0-0" 7 | 8 | python_version: "3.9" 9 | 10 | python_packages: 11 | - "scikit-learn==1.0.1" 12 | - "pillow==8.4.0" 13 | - "matplotlib==3.5.0" 14 | - "jupyterlab==3.2.4" 15 | 16 | run: 17 | - "echo env is ready!" 18 | 19 | predict: "predict.py:Predictor" 20 | 21 | image: r8.im/zeke/github-avatars -------------------------------------------------------------------------------- /model.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/model.pkl -------------------------------------------------------------------------------- /notebook_v2.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "id": "1fbbe1dd", 7 | "metadata": {}, 8 | "outputs": [], 9 | "source": [ 10 | "from sklearn import tree\n", 11 | "from sklearn.datasets import load_files\n", 12 | "import numpy as np\n", 13 | "import matplotlib.pyplot as plt\n", 14 | "from PIL import Image\n", 15 | "\n", 16 | "from preprocess import file_to_feature_vector" 17 | ] 18 | }, 19 | { 20 | "cell_type": "code", 21 | "execution_count": 2, 22 | "id": "57a53dad", 23 | "metadata": {}, 24 | "outputs": [], 25 | "source": [ 26 | "# automatically reload imported files when they change\n", 27 | "%load_ext autoreload\n", 28 | "%autoreload 1" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": 3, 34 | "id": "e8320198", 35 | "metadata": {}, 36 | "outputs": [], 37 | "source": [ 38 | "# deterministic, it seems\n", 39 | "files = load_files('./avatars', load_content=False)" 40 | ] 41 | }, 42 | { 43 | "cell_type": "code", 44 | "execution_count": 4, 45 | "id": "aa8b6469", 46 | "metadata": {}, 47 | "outputs": [ 48 | { 49 | "data": { 50 | "text/plain": [ 51 | "dict_keys(['filenames', 'target_names', 'target', 'DESCR'])" 52 | ] 53 | }, 54 | "execution_count": 4, 55 | "metadata": {}, 56 | "output_type": "execute_result" 57 | } 58 | ], 59 | "source": [ 60 | "files.keys()" 61 | ] 62 | }, 63 | { 64 | "cell_type": "code", 65 | "execution_count": 5, 66 | "id": "6e525e6d", 67 | "metadata": { 68 | "scrolled": true 69 | }, 70 | "outputs": [ 71 | { 72 | "data": { 73 | "text/plain": [ 74 | "(array(['./avatars/custom/emmas.png', './avatars/default/saxe.png',\n", 75 | " './avatars/default/cava.png', './avatars/default/awner.png',\n", 76 | " './avatars/default/sophs.png'], dtype='" 396 | ] 397 | }, 398 | "metadata": { 399 | "needs_background": "light" 400 | }, 401 | "output_type": "display_data" 402 | } 403 | ], 404 | "source": [ 405 | "# find the feature and the threshold that best splits this into two classes\n", 406 | "\n", 407 | "# go through all the examples. for all of the two features we have.\n", 408 | "\n", 409 | "# Try a threshold until it finds a value that most cleanly splits the data.\n", 410 | "\n", 411 | "# start with a simple decision tree\n", 412 | "# looks at all the data, finds the split that makes one group have most of one label, and another\n", 413 | "# group have most of another label\n", 414 | "\n", 415 | "# (if that is the most discriminating feature that can split that feature into two, it picks that feature))\n", 416 | "\n", 417 | "# find the feature that splits it most coherently into two groups\n", 418 | "# then find the second-most splitting feature\n", 419 | "\n", 420 | "clf = tree.DecisionTreeClassifier()\n", 421 | "clf = clf.fit(training_set, training_labels)\n", 422 | "tree.plot_tree(clf)" 423 | ] 424 | }, 425 | { 426 | "cell_type": "code", 427 | "execution_count": 12, 428 | "id": "4d4e509b", 429 | "metadata": {}, 430 | "outputs": [ 431 | { 432 | "data": { 433 | "text/plain": [ 434 | "1" 435 | ] 436 | }, 437 | "execution_count": 12, 438 | "metadata": {}, 439 | "output_type": "execute_result" 440 | } 441 | ], 442 | "source": [ 443 | "# gini coefficient: goodness measure of how coherent the two groups are (zero is perfect, one (or 0.5?) is useless)\n", 444 | "# it's what the decision tree uses to determine how to split\n", 445 | "\n", 446 | "# throw all of the validation examples through the tree and see which nodes they end up with\n", 447 | "prediction = clf.predict(validation_set[:1])[0]\n", 448 | "prediction" 449 | ] 450 | }, 451 | { 452 | "cell_type": "code", 453 | "execution_count": 13, 454 | "id": "96e8a4c1", 455 | "metadata": {}, 456 | "outputs": [ 457 | { 458 | "data": { 459 | "text/plain": [ 460 | "array([1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,\n", 461 | " 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0,\n", 462 | " 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1,\n", 463 | " 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1,\n", 464 | " 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1])" 465 | ] 466 | }, 467 | "execution_count": 13, 468 | "metadata": {}, 469 | "output_type": "execute_result" 470 | } 471 | ], 472 | "source": [ 473 | "predictions = clf.predict(validation_set)\n", 474 | "predictions" 475 | ] 476 | }, 477 | { 478 | "cell_type": "code", 479 | "execution_count": 14, 480 | "id": "15b7f378", 481 | "metadata": {}, 482 | "outputs": [ 483 | { 484 | "data": { 485 | "text/plain": [ 486 | "array([], dtype=int64)" 487 | ] 488 | }, 489 | "execution_count": 14, 490 | "metadata": {}, 491 | "output_type": "execute_result" 492 | } 493 | ], 494 | "source": [ 495 | "# indices of avatars that are actually defaults but are classified as custom\n", 496 | "\n", 497 | "# single &: elementwise boolean AND of vectors of matrices\n", 498 | "\n", 499 | "# 1: default\n", 500 | "# 0: custom\n", 501 | "\n", 502 | "false_customs = np.where((predictions != validation_labels)&(validation_labels == 1))[0]\n", 503 | "false_customs" 504 | ] 505 | }, 506 | { 507 | "cell_type": "code", 508 | "execution_count": 15, 509 | "id": "666f366f", 510 | "metadata": {}, 511 | "outputs": [ 512 | { 513 | "data": { 514 | "text/plain": [ 515 | "array([], dtype=int64)" 516 | ] 517 | }, 518 | "execution_count": 15, 519 | "metadata": {}, 520 | "output_type": "execute_result" 521 | } 522 | ], 523 | "source": [ 524 | "# indices of avatars that are actually customs but are classified as defaults\n", 525 | "# 1: default\n", 526 | "# 0: custom\n", 527 | "\n", 528 | "false_defaults = np.where((predictions != validation_labels)&(validation_labels == 0))[0]\n", 529 | "false_defaults" 530 | ] 531 | }, 532 | { 533 | "cell_type": "code", 534 | "execution_count": 16, 535 | "id": "6356c9c2", 536 | "metadata": {}, 537 | "outputs": [ 538 | { 539 | "data": { 540 | "text/plain": [ 541 | "1.0" 542 | ] 543 | }, 544 | "execution_count": 16, 545 | "metadata": {}, 546 | "output_type": "execute_result" 547 | } 548 | ], 549 | "source": [ 550 | "# what's our accuracy?\n", 551 | "np.mean(np.equal(predictions, validation_labels))" 552 | ] 553 | }, 554 | { 555 | "cell_type": "code", 556 | "execution_count": 17, 557 | "id": "40f00ac1", 558 | "metadata": {}, 559 | "outputs": [ 560 | { 561 | "data": { 562 | "text/plain": [ 563 | "0" 564 | ] 565 | }, 566 | "execution_count": 17, 567 | "metadata": {}, 568 | "output_type": "execute_result" 569 | } 570 | ], 571 | "source": [ 572 | "# try it out on a custom avatar\n", 573 | "feature_vector = file_to_feature_vector(\"smoke-tests/andreasjansson.png\")\n", 574 | "prediction = clf.predict([feature_vector])[0]\n", 575 | "prediction" 576 | ] 577 | }, 578 | { 579 | "cell_type": "code", 580 | "execution_count": 18, 581 | "id": "59e901a2", 582 | "metadata": {}, 583 | "outputs": [ 584 | { 585 | "data": { 586 | "text/plain": [ 587 | "1" 588 | ] 589 | }, 590 | "execution_count": 18, 591 | "metadata": {}, 592 | "output_type": "execute_result" 593 | } 594 | ], 595 | "source": [ 596 | "# try it out on a default avatar\n", 597 | "feature_vector = file_to_feature_vector(\"smoke-tests/default.png\")\n", 598 | "prediction = clf.predict([feature_vector])[0]\n", 599 | "prediction" 600 | ] 601 | }, 602 | { 603 | "cell_type": "code", 604 | "execution_count": 19, 605 | "id": "0483afc1", 606 | "metadata": {}, 607 | "outputs": [ 608 | { 609 | "data": { 610 | "text/plain": [ 611 | "['model.pkl']" 612 | ] 613 | }, 614 | "execution_count": 19, 615 | "metadata": {}, 616 | "output_type": "execute_result" 617 | } 618 | ], 619 | "source": [ 620 | "# pickle the classifier! 🥒\n", 621 | "\n", 622 | "import joblib\n", 623 | "joblib.dump(clf, 'model.pkl', compress=9)" 624 | ] 625 | } 626 | ], 627 | "metadata": { 628 | "kernelspec": { 629 | "display_name": "Python 3 (ipykernel)", 630 | "language": "python", 631 | "name": "python3" 632 | }, 633 | "language_info": { 634 | "codemirror_mode": { 635 | "name": "ipython", 636 | "version": 3 637 | }, 638 | "file_extension": ".py", 639 | "mimetype": "text/x-python", 640 | "name": "python", 641 | "nbconvert_exporter": "python", 642 | "pygments_lexer": "ipython3", 643 | "version": "3.9.12" 644 | } 645 | }, 646 | "nbformat": 4, 647 | "nbformat_minor": 5 648 | } 649 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "github-avatars", 3 | "lockfileVersion": 2, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "dependencies": { 8 | "an-array-of-english-words": "^2.0.0", 9 | "download": "^8.0.0", 10 | "lodash": "^4.17.21" 11 | } 12 | }, 13 | "node_modules/@sindresorhus/is": { 14 | "version": "0.7.0", 15 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", 16 | "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", 17 | "engines": { 18 | "node": ">=4" 19 | } 20 | }, 21 | "node_modules/an-array-of-english-words": { 22 | "version": "2.0.0", 23 | "resolved": "https://registry.npmjs.org/an-array-of-english-words/-/an-array-of-english-words-2.0.0.tgz", 24 | "integrity": "sha512-FXnNvZSOI27kkKXeLSquhaTGP7z198UOQ4txaYO9fCfrjCh+D5SV7G7XqzEH0229+pAi4cjBEZ4WIQYgjKtO7Q==", 25 | "bin": { 26 | "an-array-of-english-words": "cli.js", 27 | "words": "cli.js" 28 | } 29 | }, 30 | "node_modules/archive-type": { 31 | "version": "4.0.0", 32 | "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", 33 | "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", 34 | "dependencies": { 35 | "file-type": "^4.2.0" 36 | }, 37 | "engines": { 38 | "node": ">=4" 39 | } 40 | }, 41 | "node_modules/archive-type/node_modules/file-type": { 42 | "version": "4.4.0", 43 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", 44 | "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", 45 | "engines": { 46 | "node": ">=4" 47 | } 48 | }, 49 | "node_modules/base64-js": { 50 | "version": "1.5.1", 51 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 52 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 53 | "funding": [ 54 | { 55 | "type": "github", 56 | "url": "https://github.com/sponsors/feross" 57 | }, 58 | { 59 | "type": "patreon", 60 | "url": "https://www.patreon.com/feross" 61 | }, 62 | { 63 | "type": "consulting", 64 | "url": "https://feross.org/support" 65 | } 66 | ] 67 | }, 68 | "node_modules/bl": { 69 | "version": "1.2.3", 70 | "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", 71 | "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", 72 | "dependencies": { 73 | "readable-stream": "^2.3.5", 74 | "safe-buffer": "^5.1.1" 75 | } 76 | }, 77 | "node_modules/buffer": { 78 | "version": "5.7.1", 79 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 80 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 81 | "funding": [ 82 | { 83 | "type": "github", 84 | "url": "https://github.com/sponsors/feross" 85 | }, 86 | { 87 | "type": "patreon", 88 | "url": "https://www.patreon.com/feross" 89 | }, 90 | { 91 | "type": "consulting", 92 | "url": "https://feross.org/support" 93 | } 94 | ], 95 | "dependencies": { 96 | "base64-js": "^1.3.1", 97 | "ieee754": "^1.1.13" 98 | } 99 | }, 100 | "node_modules/buffer-alloc": { 101 | "version": "1.2.0", 102 | "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", 103 | "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", 104 | "dependencies": { 105 | "buffer-alloc-unsafe": "^1.1.0", 106 | "buffer-fill": "^1.0.0" 107 | } 108 | }, 109 | "node_modules/buffer-alloc-unsafe": { 110 | "version": "1.1.0", 111 | "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", 112 | "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" 113 | }, 114 | "node_modules/buffer-crc32": { 115 | "version": "0.2.13", 116 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 117 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", 118 | "engines": { 119 | "node": "*" 120 | } 121 | }, 122 | "node_modules/buffer-fill": { 123 | "version": "1.0.0", 124 | "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", 125 | "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" 126 | }, 127 | "node_modules/cacheable-request": { 128 | "version": "2.1.4", 129 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", 130 | "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", 131 | "dependencies": { 132 | "clone-response": "1.0.2", 133 | "get-stream": "3.0.0", 134 | "http-cache-semantics": "3.8.1", 135 | "keyv": "3.0.0", 136 | "lowercase-keys": "1.0.0", 137 | "normalize-url": "2.0.1", 138 | "responselike": "1.0.2" 139 | } 140 | }, 141 | "node_modules/cacheable-request/node_modules/get-stream": { 142 | "version": "3.0.0", 143 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", 144 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", 145 | "engines": { 146 | "node": ">=4" 147 | } 148 | }, 149 | "node_modules/cacheable-request/node_modules/lowercase-keys": { 150 | "version": "1.0.0", 151 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", 152 | "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", 153 | "engines": { 154 | "node": ">=0.10.0" 155 | } 156 | }, 157 | "node_modules/clone-response": { 158 | "version": "1.0.2", 159 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", 160 | "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", 161 | "dependencies": { 162 | "mimic-response": "^1.0.0" 163 | } 164 | }, 165 | "node_modules/commander": { 166 | "version": "2.20.3", 167 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 168 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" 169 | }, 170 | "node_modules/content-disposition": { 171 | "version": "0.5.3", 172 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", 173 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", 174 | "dependencies": { 175 | "safe-buffer": "5.1.2" 176 | }, 177 | "engines": { 178 | "node": ">= 0.6" 179 | } 180 | }, 181 | "node_modules/core-util-is": { 182 | "version": "1.0.3", 183 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 184 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" 185 | }, 186 | "node_modules/decode-uri-component": { 187 | "version": "0.2.0", 188 | "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", 189 | "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", 190 | "engines": { 191 | "node": ">=0.10" 192 | } 193 | }, 194 | "node_modules/decompress": { 195 | "version": "4.2.1", 196 | "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", 197 | "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", 198 | "dependencies": { 199 | "decompress-tar": "^4.0.0", 200 | "decompress-tarbz2": "^4.0.0", 201 | "decompress-targz": "^4.0.0", 202 | "decompress-unzip": "^4.0.1", 203 | "graceful-fs": "^4.1.10", 204 | "make-dir": "^1.0.0", 205 | "pify": "^2.3.0", 206 | "strip-dirs": "^2.0.0" 207 | }, 208 | "engines": { 209 | "node": ">=4" 210 | } 211 | }, 212 | "node_modules/decompress-response": { 213 | "version": "3.3.0", 214 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 215 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", 216 | "dependencies": { 217 | "mimic-response": "^1.0.0" 218 | }, 219 | "engines": { 220 | "node": ">=4" 221 | } 222 | }, 223 | "node_modules/decompress-tar": { 224 | "version": "4.1.1", 225 | "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", 226 | "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", 227 | "dependencies": { 228 | "file-type": "^5.2.0", 229 | "is-stream": "^1.1.0", 230 | "tar-stream": "^1.5.2" 231 | }, 232 | "engines": { 233 | "node": ">=4" 234 | } 235 | }, 236 | "node_modules/decompress-tar/node_modules/file-type": { 237 | "version": "5.2.0", 238 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", 239 | "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", 240 | "engines": { 241 | "node": ">=4" 242 | } 243 | }, 244 | "node_modules/decompress-tarbz2": { 245 | "version": "4.1.1", 246 | "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", 247 | "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", 248 | "dependencies": { 249 | "decompress-tar": "^4.1.0", 250 | "file-type": "^6.1.0", 251 | "is-stream": "^1.1.0", 252 | "seek-bzip": "^1.0.5", 253 | "unbzip2-stream": "^1.0.9" 254 | }, 255 | "engines": { 256 | "node": ">=4" 257 | } 258 | }, 259 | "node_modules/decompress-tarbz2/node_modules/file-type": { 260 | "version": "6.2.0", 261 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", 262 | "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", 263 | "engines": { 264 | "node": ">=4" 265 | } 266 | }, 267 | "node_modules/decompress-targz": { 268 | "version": "4.1.1", 269 | "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", 270 | "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", 271 | "dependencies": { 272 | "decompress-tar": "^4.1.1", 273 | "file-type": "^5.2.0", 274 | "is-stream": "^1.1.0" 275 | }, 276 | "engines": { 277 | "node": ">=4" 278 | } 279 | }, 280 | "node_modules/decompress-targz/node_modules/file-type": { 281 | "version": "5.2.0", 282 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", 283 | "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", 284 | "engines": { 285 | "node": ">=4" 286 | } 287 | }, 288 | "node_modules/decompress-unzip": { 289 | "version": "4.0.1", 290 | "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", 291 | "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", 292 | "dependencies": { 293 | "file-type": "^3.8.0", 294 | "get-stream": "^2.2.0", 295 | "pify": "^2.3.0", 296 | "yauzl": "^2.4.2" 297 | }, 298 | "engines": { 299 | "node": ">=4" 300 | } 301 | }, 302 | "node_modules/decompress-unzip/node_modules/file-type": { 303 | "version": "3.9.0", 304 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", 305 | "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", 306 | "engines": { 307 | "node": ">=0.10.0" 308 | } 309 | }, 310 | "node_modules/decompress-unzip/node_modules/get-stream": { 311 | "version": "2.3.1", 312 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", 313 | "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", 314 | "dependencies": { 315 | "object-assign": "^4.0.1", 316 | "pinkie-promise": "^2.0.0" 317 | }, 318 | "engines": { 319 | "node": ">=0.10.0" 320 | } 321 | }, 322 | "node_modules/decompress-unzip/node_modules/pify": { 323 | "version": "2.3.0", 324 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 325 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 326 | "engines": { 327 | "node": ">=0.10.0" 328 | } 329 | }, 330 | "node_modules/decompress/node_modules/make-dir": { 331 | "version": "1.3.0", 332 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", 333 | "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", 334 | "dependencies": { 335 | "pify": "^3.0.0" 336 | }, 337 | "engines": { 338 | "node": ">=4" 339 | } 340 | }, 341 | "node_modules/decompress/node_modules/make-dir/node_modules/pify": { 342 | "version": "3.0.0", 343 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 344 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", 345 | "engines": { 346 | "node": ">=4" 347 | } 348 | }, 349 | "node_modules/decompress/node_modules/pify": { 350 | "version": "2.3.0", 351 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 352 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 353 | "engines": { 354 | "node": ">=0.10.0" 355 | } 356 | }, 357 | "node_modules/download": { 358 | "version": "8.0.0", 359 | "resolved": "https://registry.npmjs.org/download/-/download-8.0.0.tgz", 360 | "integrity": "sha512-ASRY5QhDk7FK+XrQtQyvhpDKanLluEEQtWl/J7Lxuf/b+i8RYh997QeXvL85xitrmRKVlx9c7eTrcRdq2GS4eA==", 361 | "dependencies": { 362 | "archive-type": "^4.0.0", 363 | "content-disposition": "^0.5.2", 364 | "decompress": "^4.2.1", 365 | "ext-name": "^5.0.0", 366 | "file-type": "^11.1.0", 367 | "filenamify": "^3.0.0", 368 | "get-stream": "^4.1.0", 369 | "got": "^8.3.1", 370 | "make-dir": "^2.1.0", 371 | "p-event": "^2.1.0", 372 | "pify": "^4.0.1" 373 | }, 374 | "engines": { 375 | "node": ">=10" 376 | } 377 | }, 378 | "node_modules/duplexer3": { 379 | "version": "0.1.4", 380 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", 381 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" 382 | }, 383 | "node_modules/end-of-stream": { 384 | "version": "1.4.4", 385 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 386 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 387 | "dependencies": { 388 | "once": "^1.4.0" 389 | } 390 | }, 391 | "node_modules/escape-string-regexp": { 392 | "version": "1.0.5", 393 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 394 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 395 | "engines": { 396 | "node": ">=0.8.0" 397 | } 398 | }, 399 | "node_modules/ext-list": { 400 | "version": "2.2.2", 401 | "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", 402 | "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", 403 | "dependencies": { 404 | "mime-db": "^1.28.0" 405 | }, 406 | "engines": { 407 | "node": ">=0.10.0" 408 | } 409 | }, 410 | "node_modules/ext-name": { 411 | "version": "5.0.0", 412 | "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", 413 | "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", 414 | "dependencies": { 415 | "ext-list": "^2.0.0", 416 | "sort-keys-length": "^1.0.0" 417 | }, 418 | "engines": { 419 | "node": ">=4" 420 | } 421 | }, 422 | "node_modules/fd-slicer": { 423 | "version": "1.1.0", 424 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 425 | "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", 426 | "dependencies": { 427 | "pend": "~1.2.0" 428 | } 429 | }, 430 | "node_modules/file-type": { 431 | "version": "11.1.0", 432 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz", 433 | "integrity": "sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g==", 434 | "engines": { 435 | "node": ">=6" 436 | } 437 | }, 438 | "node_modules/filename-reserved-regex": { 439 | "version": "2.0.0", 440 | "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", 441 | "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", 442 | "engines": { 443 | "node": ">=4" 444 | } 445 | }, 446 | "node_modules/filenamify": { 447 | "version": "3.0.0", 448 | "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-3.0.0.tgz", 449 | "integrity": "sha512-5EFZ//MsvJgXjBAFJ+Bh2YaCTRF/VP1YOmGrgt+KJ4SFRLjI87EIdwLLuT6wQX0I4F9W41xutobzczjsOKlI/g==", 450 | "dependencies": { 451 | "filename-reserved-regex": "^2.0.0", 452 | "strip-outer": "^1.0.0", 453 | "trim-repeated": "^1.0.0" 454 | }, 455 | "engines": { 456 | "node": ">=6" 457 | } 458 | }, 459 | "node_modules/from2": { 460 | "version": "2.3.0", 461 | "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", 462 | "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", 463 | "dependencies": { 464 | "inherits": "^2.0.1", 465 | "readable-stream": "^2.0.0" 466 | } 467 | }, 468 | "node_modules/fs-constants": { 469 | "version": "1.0.0", 470 | "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", 471 | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" 472 | }, 473 | "node_modules/get-stream": { 474 | "version": "4.1.0", 475 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 476 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 477 | "dependencies": { 478 | "pump": "^3.0.0" 479 | }, 480 | "engines": { 481 | "node": ">=6" 482 | } 483 | }, 484 | "node_modules/got": { 485 | "version": "8.3.2", 486 | "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", 487 | "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", 488 | "dependencies": { 489 | "@sindresorhus/is": "^0.7.0", 490 | "cacheable-request": "^2.1.1", 491 | "decompress-response": "^3.3.0", 492 | "duplexer3": "^0.1.4", 493 | "get-stream": "^3.0.0", 494 | "into-stream": "^3.1.0", 495 | "is-retry-allowed": "^1.1.0", 496 | "isurl": "^1.0.0-alpha5", 497 | "lowercase-keys": "^1.0.0", 498 | "mimic-response": "^1.0.0", 499 | "p-cancelable": "^0.4.0", 500 | "p-timeout": "^2.0.1", 501 | "pify": "^3.0.0", 502 | "safe-buffer": "^5.1.1", 503 | "timed-out": "^4.0.1", 504 | "url-parse-lax": "^3.0.0", 505 | "url-to-options": "^1.0.1" 506 | }, 507 | "engines": { 508 | "node": ">=4" 509 | } 510 | }, 511 | "node_modules/got/node_modules/get-stream": { 512 | "version": "3.0.0", 513 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", 514 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", 515 | "engines": { 516 | "node": ">=4" 517 | } 518 | }, 519 | "node_modules/got/node_modules/pify": { 520 | "version": "3.0.0", 521 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 522 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", 523 | "engines": { 524 | "node": ">=4" 525 | } 526 | }, 527 | "node_modules/graceful-fs": { 528 | "version": "4.2.8", 529 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", 530 | "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" 531 | }, 532 | "node_modules/has-symbol-support-x": { 533 | "version": "1.4.2", 534 | "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", 535 | "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", 536 | "engines": { 537 | "node": "*" 538 | } 539 | }, 540 | "node_modules/has-to-string-tag-x": { 541 | "version": "1.4.1", 542 | "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", 543 | "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", 544 | "dependencies": { 545 | "has-symbol-support-x": "^1.4.1" 546 | }, 547 | "engines": { 548 | "node": "*" 549 | } 550 | }, 551 | "node_modules/http-cache-semantics": { 552 | "version": "3.8.1", 553 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", 554 | "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" 555 | }, 556 | "node_modules/ieee754": { 557 | "version": "1.2.1", 558 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 559 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 560 | "funding": [ 561 | { 562 | "type": "github", 563 | "url": "https://github.com/sponsors/feross" 564 | }, 565 | { 566 | "type": "patreon", 567 | "url": "https://www.patreon.com/feross" 568 | }, 569 | { 570 | "type": "consulting", 571 | "url": "https://feross.org/support" 572 | } 573 | ] 574 | }, 575 | "node_modules/inherits": { 576 | "version": "2.0.4", 577 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 578 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 579 | }, 580 | "node_modules/into-stream": { 581 | "version": "3.1.0", 582 | "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", 583 | "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", 584 | "dependencies": { 585 | "from2": "^2.1.1", 586 | "p-is-promise": "^1.1.0" 587 | }, 588 | "engines": { 589 | "node": ">=4" 590 | } 591 | }, 592 | "node_modules/is-natural-number": { 593 | "version": "4.0.1", 594 | "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", 595 | "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" 596 | }, 597 | "node_modules/is-object": { 598 | "version": "1.0.2", 599 | "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", 600 | "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", 601 | "funding": { 602 | "url": "https://github.com/sponsors/ljharb" 603 | } 604 | }, 605 | "node_modules/is-plain-obj": { 606 | "version": "1.1.0", 607 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", 608 | "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", 609 | "engines": { 610 | "node": ">=0.10.0" 611 | } 612 | }, 613 | "node_modules/is-retry-allowed": { 614 | "version": "1.2.0", 615 | "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", 616 | "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", 617 | "engines": { 618 | "node": ">=0.10.0" 619 | } 620 | }, 621 | "node_modules/is-stream": { 622 | "version": "1.1.0", 623 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 624 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", 625 | "engines": { 626 | "node": ">=0.10.0" 627 | } 628 | }, 629 | "node_modules/isarray": { 630 | "version": "1.0.0", 631 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 632 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 633 | }, 634 | "node_modules/isurl": { 635 | "version": "1.0.0", 636 | "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", 637 | "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", 638 | "dependencies": { 639 | "has-to-string-tag-x": "^1.2.0", 640 | "is-object": "^1.0.1" 641 | }, 642 | "engines": { 643 | "node": ">= 4" 644 | } 645 | }, 646 | "node_modules/json-buffer": { 647 | "version": "3.0.0", 648 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", 649 | "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" 650 | }, 651 | "node_modules/keyv": { 652 | "version": "3.0.0", 653 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", 654 | "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", 655 | "dependencies": { 656 | "json-buffer": "3.0.0" 657 | } 658 | }, 659 | "node_modules/lodash": { 660 | "version": "4.17.21", 661 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 662 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 663 | }, 664 | "node_modules/lowercase-keys": { 665 | "version": "1.0.1", 666 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 667 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", 668 | "engines": { 669 | "node": ">=0.10.0" 670 | } 671 | }, 672 | "node_modules/make-dir": { 673 | "version": "2.1.0", 674 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", 675 | "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", 676 | "dependencies": { 677 | "pify": "^4.0.1", 678 | "semver": "^5.6.0" 679 | }, 680 | "engines": { 681 | "node": ">=6" 682 | } 683 | }, 684 | "node_modules/mime-db": { 685 | "version": "1.51.0", 686 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", 687 | "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", 688 | "engines": { 689 | "node": ">= 0.6" 690 | } 691 | }, 692 | "node_modules/mimic-response": { 693 | "version": "1.0.1", 694 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 695 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 696 | "engines": { 697 | "node": ">=4" 698 | } 699 | }, 700 | "node_modules/normalize-url": { 701 | "version": "2.0.1", 702 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", 703 | "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", 704 | "dependencies": { 705 | "prepend-http": "^2.0.0", 706 | "query-string": "^5.0.1", 707 | "sort-keys": "^2.0.0" 708 | }, 709 | "engines": { 710 | "node": ">=4" 711 | } 712 | }, 713 | "node_modules/normalize-url/node_modules/sort-keys": { 714 | "version": "2.0.0", 715 | "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", 716 | "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", 717 | "dependencies": { 718 | "is-plain-obj": "^1.0.0" 719 | }, 720 | "engines": { 721 | "node": ">=4" 722 | } 723 | }, 724 | "node_modules/object-assign": { 725 | "version": "4.1.1", 726 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 727 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 728 | "engines": { 729 | "node": ">=0.10.0" 730 | } 731 | }, 732 | "node_modules/once": { 733 | "version": "1.4.0", 734 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 735 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 736 | "dependencies": { 737 | "wrappy": "1" 738 | } 739 | }, 740 | "node_modules/p-cancelable": { 741 | "version": "0.4.1", 742 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", 743 | "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", 744 | "engines": { 745 | "node": ">=4" 746 | } 747 | }, 748 | "node_modules/p-event": { 749 | "version": "2.3.1", 750 | "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", 751 | "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", 752 | "dependencies": { 753 | "p-timeout": "^2.0.1" 754 | }, 755 | "engines": { 756 | "node": ">=6" 757 | } 758 | }, 759 | "node_modules/p-finally": { 760 | "version": "1.0.0", 761 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 762 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", 763 | "engines": { 764 | "node": ">=4" 765 | } 766 | }, 767 | "node_modules/p-is-promise": { 768 | "version": "1.1.0", 769 | "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", 770 | "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", 771 | "engines": { 772 | "node": ">=4" 773 | } 774 | }, 775 | "node_modules/p-timeout": { 776 | "version": "2.0.1", 777 | "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", 778 | "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", 779 | "dependencies": { 780 | "p-finally": "^1.0.0" 781 | }, 782 | "engines": { 783 | "node": ">=4" 784 | } 785 | }, 786 | "node_modules/pend": { 787 | "version": "1.2.0", 788 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 789 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" 790 | }, 791 | "node_modules/pify": { 792 | "version": "4.0.1", 793 | "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", 794 | "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", 795 | "engines": { 796 | "node": ">=6" 797 | } 798 | }, 799 | "node_modules/pinkie": { 800 | "version": "2.0.4", 801 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 802 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", 803 | "engines": { 804 | "node": ">=0.10.0" 805 | } 806 | }, 807 | "node_modules/pinkie-promise": { 808 | "version": "2.0.1", 809 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 810 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 811 | "dependencies": { 812 | "pinkie": "^2.0.0" 813 | }, 814 | "engines": { 815 | "node": ">=0.10.0" 816 | } 817 | }, 818 | "node_modules/prepend-http": { 819 | "version": "2.0.0", 820 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", 821 | "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", 822 | "engines": { 823 | "node": ">=4" 824 | } 825 | }, 826 | "node_modules/process-nextick-args": { 827 | "version": "2.0.1", 828 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 829 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 830 | }, 831 | "node_modules/pump": { 832 | "version": "3.0.0", 833 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 834 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 835 | "dependencies": { 836 | "end-of-stream": "^1.1.0", 837 | "once": "^1.3.1" 838 | } 839 | }, 840 | "node_modules/query-string": { 841 | "version": "5.1.1", 842 | "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", 843 | "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", 844 | "dependencies": { 845 | "decode-uri-component": "^0.2.0", 846 | "object-assign": "^4.1.0", 847 | "strict-uri-encode": "^1.0.0" 848 | }, 849 | "engines": { 850 | "node": ">=0.10.0" 851 | } 852 | }, 853 | "node_modules/readable-stream": { 854 | "version": "2.3.7", 855 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 856 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 857 | "dependencies": { 858 | "core-util-is": "~1.0.0", 859 | "inherits": "~2.0.3", 860 | "isarray": "~1.0.0", 861 | "process-nextick-args": "~2.0.0", 862 | "safe-buffer": "~5.1.1", 863 | "string_decoder": "~1.1.1", 864 | "util-deprecate": "~1.0.1" 865 | } 866 | }, 867 | "node_modules/responselike": { 868 | "version": "1.0.2", 869 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", 870 | "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", 871 | "dependencies": { 872 | "lowercase-keys": "^1.0.0" 873 | } 874 | }, 875 | "node_modules/safe-buffer": { 876 | "version": "5.1.2", 877 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 878 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 879 | }, 880 | "node_modules/seek-bzip": { 881 | "version": "1.0.6", 882 | "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", 883 | "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", 884 | "dependencies": { 885 | "commander": "^2.8.1" 886 | }, 887 | "bin": { 888 | "seek-bunzip": "bin/seek-bunzip", 889 | "seek-table": "bin/seek-bzip-table" 890 | } 891 | }, 892 | "node_modules/semver": { 893 | "version": "5.7.1", 894 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 895 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 896 | "bin": { 897 | "semver": "bin/semver" 898 | } 899 | }, 900 | "node_modules/sort-keys": { 901 | "version": "1.1.2", 902 | "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", 903 | "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", 904 | "dependencies": { 905 | "is-plain-obj": "^1.0.0" 906 | }, 907 | "engines": { 908 | "node": ">=0.10.0" 909 | } 910 | }, 911 | "node_modules/sort-keys-length": { 912 | "version": "1.0.1", 913 | "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", 914 | "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", 915 | "dependencies": { 916 | "sort-keys": "^1.0.0" 917 | }, 918 | "engines": { 919 | "node": ">=0.10.0" 920 | } 921 | }, 922 | "node_modules/strict-uri-encode": { 923 | "version": "1.1.0", 924 | "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", 925 | "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", 926 | "engines": { 927 | "node": ">=0.10.0" 928 | } 929 | }, 930 | "node_modules/string_decoder": { 931 | "version": "1.1.1", 932 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 933 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 934 | "dependencies": { 935 | "safe-buffer": "~5.1.0" 936 | } 937 | }, 938 | "node_modules/strip-dirs": { 939 | "version": "2.1.0", 940 | "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", 941 | "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", 942 | "dependencies": { 943 | "is-natural-number": "^4.0.1" 944 | } 945 | }, 946 | "node_modules/strip-outer": { 947 | "version": "1.0.1", 948 | "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", 949 | "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", 950 | "dependencies": { 951 | "escape-string-regexp": "^1.0.2" 952 | }, 953 | "engines": { 954 | "node": ">=0.10.0" 955 | } 956 | }, 957 | "node_modules/tar-stream": { 958 | "version": "1.6.2", 959 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", 960 | "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", 961 | "dependencies": { 962 | "bl": "^1.0.0", 963 | "buffer-alloc": "^1.2.0", 964 | "end-of-stream": "^1.0.0", 965 | "fs-constants": "^1.0.0", 966 | "readable-stream": "^2.3.0", 967 | "to-buffer": "^1.1.1", 968 | "xtend": "^4.0.0" 969 | }, 970 | "engines": { 971 | "node": ">= 0.8.0" 972 | } 973 | }, 974 | "node_modules/through": { 975 | "version": "2.3.8", 976 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 977 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" 978 | }, 979 | "node_modules/timed-out": { 980 | "version": "4.0.1", 981 | "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", 982 | "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", 983 | "engines": { 984 | "node": ">=0.10.0" 985 | } 986 | }, 987 | "node_modules/to-buffer": { 988 | "version": "1.1.1", 989 | "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", 990 | "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" 991 | }, 992 | "node_modules/trim-repeated": { 993 | "version": "1.0.0", 994 | "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", 995 | "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", 996 | "dependencies": { 997 | "escape-string-regexp": "^1.0.2" 998 | }, 999 | "engines": { 1000 | "node": ">=0.10.0" 1001 | } 1002 | }, 1003 | "node_modules/unbzip2-stream": { 1004 | "version": "1.4.3", 1005 | "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", 1006 | "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", 1007 | "dependencies": { 1008 | "buffer": "^5.2.1", 1009 | "through": "^2.3.8" 1010 | } 1011 | }, 1012 | "node_modules/url-parse-lax": { 1013 | "version": "3.0.0", 1014 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", 1015 | "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", 1016 | "dependencies": { 1017 | "prepend-http": "^2.0.0" 1018 | }, 1019 | "engines": { 1020 | "node": ">=4" 1021 | } 1022 | }, 1023 | "node_modules/url-to-options": { 1024 | "version": "1.0.1", 1025 | "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", 1026 | "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", 1027 | "engines": { 1028 | "node": ">= 4" 1029 | } 1030 | }, 1031 | "node_modules/util-deprecate": { 1032 | "version": "1.0.2", 1033 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1034 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1035 | }, 1036 | "node_modules/wrappy": { 1037 | "version": "1.0.2", 1038 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1039 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1040 | }, 1041 | "node_modules/xtend": { 1042 | "version": "4.0.2", 1043 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1044 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 1045 | "engines": { 1046 | "node": ">=0.4" 1047 | } 1048 | }, 1049 | "node_modules/yauzl": { 1050 | "version": "2.10.0", 1051 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 1052 | "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", 1053 | "dependencies": { 1054 | "buffer-crc32": "~0.2.3", 1055 | "fd-slicer": "~1.1.0" 1056 | } 1057 | } 1058 | }, 1059 | "dependencies": { 1060 | "@sindresorhus/is": { 1061 | "version": "0.7.0", 1062 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", 1063 | "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==" 1064 | }, 1065 | "an-array-of-english-words": { 1066 | "version": "2.0.0", 1067 | "resolved": "https://registry.npmjs.org/an-array-of-english-words/-/an-array-of-english-words-2.0.0.tgz", 1068 | "integrity": "sha512-FXnNvZSOI27kkKXeLSquhaTGP7z198UOQ4txaYO9fCfrjCh+D5SV7G7XqzEH0229+pAi4cjBEZ4WIQYgjKtO7Q==" 1069 | }, 1070 | "archive-type": { 1071 | "version": "4.0.0", 1072 | "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", 1073 | "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", 1074 | "requires": { 1075 | "file-type": "^4.2.0" 1076 | }, 1077 | "dependencies": { 1078 | "file-type": { 1079 | "version": "4.4.0", 1080 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", 1081 | "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=" 1082 | } 1083 | } 1084 | }, 1085 | "base64-js": { 1086 | "version": "1.5.1", 1087 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 1088 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" 1089 | }, 1090 | "bl": { 1091 | "version": "1.2.3", 1092 | "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", 1093 | "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", 1094 | "requires": { 1095 | "readable-stream": "^2.3.5", 1096 | "safe-buffer": "^5.1.1" 1097 | } 1098 | }, 1099 | "buffer": { 1100 | "version": "5.7.1", 1101 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 1102 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 1103 | "requires": { 1104 | "base64-js": "^1.3.1", 1105 | "ieee754": "^1.1.13" 1106 | } 1107 | }, 1108 | "buffer-alloc": { 1109 | "version": "1.2.0", 1110 | "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", 1111 | "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", 1112 | "requires": { 1113 | "buffer-alloc-unsafe": "^1.1.0", 1114 | "buffer-fill": "^1.0.0" 1115 | } 1116 | }, 1117 | "buffer-alloc-unsafe": { 1118 | "version": "1.1.0", 1119 | "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", 1120 | "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" 1121 | }, 1122 | "buffer-crc32": { 1123 | "version": "0.2.13", 1124 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 1125 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" 1126 | }, 1127 | "buffer-fill": { 1128 | "version": "1.0.0", 1129 | "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", 1130 | "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" 1131 | }, 1132 | "cacheable-request": { 1133 | "version": "2.1.4", 1134 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", 1135 | "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", 1136 | "requires": { 1137 | "clone-response": "1.0.2", 1138 | "get-stream": "3.0.0", 1139 | "http-cache-semantics": "3.8.1", 1140 | "keyv": "3.0.0", 1141 | "lowercase-keys": "1.0.0", 1142 | "normalize-url": "2.0.1", 1143 | "responselike": "1.0.2" 1144 | }, 1145 | "dependencies": { 1146 | "get-stream": { 1147 | "version": "3.0.0", 1148 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", 1149 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" 1150 | }, 1151 | "lowercase-keys": { 1152 | "version": "1.0.0", 1153 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", 1154 | "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" 1155 | } 1156 | } 1157 | }, 1158 | "clone-response": { 1159 | "version": "1.0.2", 1160 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", 1161 | "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", 1162 | "requires": { 1163 | "mimic-response": "^1.0.0" 1164 | } 1165 | }, 1166 | "commander": { 1167 | "version": "2.20.3", 1168 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1169 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" 1170 | }, 1171 | "content-disposition": { 1172 | "version": "0.5.3", 1173 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", 1174 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", 1175 | "requires": { 1176 | "safe-buffer": "5.1.2" 1177 | } 1178 | }, 1179 | "core-util-is": { 1180 | "version": "1.0.3", 1181 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 1182 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" 1183 | }, 1184 | "decode-uri-component": { 1185 | "version": "0.2.0", 1186 | "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", 1187 | "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" 1188 | }, 1189 | "decompress": { 1190 | "version": "4.2.1", 1191 | "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", 1192 | "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", 1193 | "requires": { 1194 | "decompress-tar": "^4.0.0", 1195 | "decompress-tarbz2": "^4.0.0", 1196 | "decompress-targz": "^4.0.0", 1197 | "decompress-unzip": "^4.0.1", 1198 | "graceful-fs": "^4.1.10", 1199 | "make-dir": "^1.0.0", 1200 | "pify": "^2.3.0", 1201 | "strip-dirs": "^2.0.0" 1202 | }, 1203 | "dependencies": { 1204 | "make-dir": { 1205 | "version": "1.3.0", 1206 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", 1207 | "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", 1208 | "requires": { 1209 | "pify": "^3.0.0" 1210 | }, 1211 | "dependencies": { 1212 | "pify": { 1213 | "version": "3.0.0", 1214 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 1215 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" 1216 | } 1217 | } 1218 | }, 1219 | "pify": { 1220 | "version": "2.3.0", 1221 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1222 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" 1223 | } 1224 | } 1225 | }, 1226 | "decompress-response": { 1227 | "version": "3.3.0", 1228 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 1229 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", 1230 | "requires": { 1231 | "mimic-response": "^1.0.0" 1232 | } 1233 | }, 1234 | "decompress-tar": { 1235 | "version": "4.1.1", 1236 | "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", 1237 | "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", 1238 | "requires": { 1239 | "file-type": "^5.2.0", 1240 | "is-stream": "^1.1.0", 1241 | "tar-stream": "^1.5.2" 1242 | }, 1243 | "dependencies": { 1244 | "file-type": { 1245 | "version": "5.2.0", 1246 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", 1247 | "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" 1248 | } 1249 | } 1250 | }, 1251 | "decompress-tarbz2": { 1252 | "version": "4.1.1", 1253 | "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", 1254 | "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", 1255 | "requires": { 1256 | "decompress-tar": "^4.1.0", 1257 | "file-type": "^6.1.0", 1258 | "is-stream": "^1.1.0", 1259 | "seek-bzip": "^1.0.5", 1260 | "unbzip2-stream": "^1.0.9" 1261 | }, 1262 | "dependencies": { 1263 | "file-type": { 1264 | "version": "6.2.0", 1265 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", 1266 | "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" 1267 | } 1268 | } 1269 | }, 1270 | "decompress-targz": { 1271 | "version": "4.1.1", 1272 | "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", 1273 | "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", 1274 | "requires": { 1275 | "decompress-tar": "^4.1.1", 1276 | "file-type": "^5.2.0", 1277 | "is-stream": "^1.1.0" 1278 | }, 1279 | "dependencies": { 1280 | "file-type": { 1281 | "version": "5.2.0", 1282 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", 1283 | "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" 1284 | } 1285 | } 1286 | }, 1287 | "decompress-unzip": { 1288 | "version": "4.0.1", 1289 | "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", 1290 | "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", 1291 | "requires": { 1292 | "file-type": "^3.8.0", 1293 | "get-stream": "^2.2.0", 1294 | "pify": "^2.3.0", 1295 | "yauzl": "^2.4.2" 1296 | }, 1297 | "dependencies": { 1298 | "file-type": { 1299 | "version": "3.9.0", 1300 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", 1301 | "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" 1302 | }, 1303 | "get-stream": { 1304 | "version": "2.3.1", 1305 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", 1306 | "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", 1307 | "requires": { 1308 | "object-assign": "^4.0.1", 1309 | "pinkie-promise": "^2.0.0" 1310 | } 1311 | }, 1312 | "pify": { 1313 | "version": "2.3.0", 1314 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1315 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" 1316 | } 1317 | } 1318 | }, 1319 | "download": { 1320 | "version": "8.0.0", 1321 | "resolved": "https://registry.npmjs.org/download/-/download-8.0.0.tgz", 1322 | "integrity": "sha512-ASRY5QhDk7FK+XrQtQyvhpDKanLluEEQtWl/J7Lxuf/b+i8RYh997QeXvL85xitrmRKVlx9c7eTrcRdq2GS4eA==", 1323 | "requires": { 1324 | "archive-type": "^4.0.0", 1325 | "content-disposition": "^0.5.2", 1326 | "decompress": "^4.2.1", 1327 | "ext-name": "^5.0.0", 1328 | "file-type": "^11.1.0", 1329 | "filenamify": "^3.0.0", 1330 | "get-stream": "^4.1.0", 1331 | "got": "^8.3.1", 1332 | "make-dir": "^2.1.0", 1333 | "p-event": "^2.1.0", 1334 | "pify": "^4.0.1" 1335 | } 1336 | }, 1337 | "duplexer3": { 1338 | "version": "0.1.4", 1339 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", 1340 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" 1341 | }, 1342 | "end-of-stream": { 1343 | "version": "1.4.4", 1344 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 1345 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 1346 | "requires": { 1347 | "once": "^1.4.0" 1348 | } 1349 | }, 1350 | "escape-string-regexp": { 1351 | "version": "1.0.5", 1352 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1353 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 1354 | }, 1355 | "ext-list": { 1356 | "version": "2.2.2", 1357 | "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", 1358 | "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", 1359 | "requires": { 1360 | "mime-db": "^1.28.0" 1361 | } 1362 | }, 1363 | "ext-name": { 1364 | "version": "5.0.0", 1365 | "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", 1366 | "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", 1367 | "requires": { 1368 | "ext-list": "^2.0.0", 1369 | "sort-keys-length": "^1.0.0" 1370 | } 1371 | }, 1372 | "fd-slicer": { 1373 | "version": "1.1.0", 1374 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 1375 | "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", 1376 | "requires": { 1377 | "pend": "~1.2.0" 1378 | } 1379 | }, 1380 | "file-type": { 1381 | "version": "11.1.0", 1382 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz", 1383 | "integrity": "sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g==" 1384 | }, 1385 | "filename-reserved-regex": { 1386 | "version": "2.0.0", 1387 | "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", 1388 | "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=" 1389 | }, 1390 | "filenamify": { 1391 | "version": "3.0.0", 1392 | "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-3.0.0.tgz", 1393 | "integrity": "sha512-5EFZ//MsvJgXjBAFJ+Bh2YaCTRF/VP1YOmGrgt+KJ4SFRLjI87EIdwLLuT6wQX0I4F9W41xutobzczjsOKlI/g==", 1394 | "requires": { 1395 | "filename-reserved-regex": "^2.0.0", 1396 | "strip-outer": "^1.0.0", 1397 | "trim-repeated": "^1.0.0" 1398 | } 1399 | }, 1400 | "from2": { 1401 | "version": "2.3.0", 1402 | "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", 1403 | "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", 1404 | "requires": { 1405 | "inherits": "^2.0.1", 1406 | "readable-stream": "^2.0.0" 1407 | } 1408 | }, 1409 | "fs-constants": { 1410 | "version": "1.0.0", 1411 | "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", 1412 | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" 1413 | }, 1414 | "get-stream": { 1415 | "version": "4.1.0", 1416 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 1417 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 1418 | "requires": { 1419 | "pump": "^3.0.0" 1420 | } 1421 | }, 1422 | "got": { 1423 | "version": "8.3.2", 1424 | "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", 1425 | "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", 1426 | "requires": { 1427 | "@sindresorhus/is": "^0.7.0", 1428 | "cacheable-request": "^2.1.1", 1429 | "decompress-response": "^3.3.0", 1430 | "duplexer3": "^0.1.4", 1431 | "get-stream": "^3.0.0", 1432 | "into-stream": "^3.1.0", 1433 | "is-retry-allowed": "^1.1.0", 1434 | "isurl": "^1.0.0-alpha5", 1435 | "lowercase-keys": "^1.0.0", 1436 | "mimic-response": "^1.0.0", 1437 | "p-cancelable": "^0.4.0", 1438 | "p-timeout": "^2.0.1", 1439 | "pify": "^3.0.0", 1440 | "safe-buffer": "^5.1.1", 1441 | "timed-out": "^4.0.1", 1442 | "url-parse-lax": "^3.0.0", 1443 | "url-to-options": "^1.0.1" 1444 | }, 1445 | "dependencies": { 1446 | "get-stream": { 1447 | "version": "3.0.0", 1448 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", 1449 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" 1450 | }, 1451 | "pify": { 1452 | "version": "3.0.0", 1453 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 1454 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" 1455 | } 1456 | } 1457 | }, 1458 | "graceful-fs": { 1459 | "version": "4.2.8", 1460 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", 1461 | "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" 1462 | }, 1463 | "has-symbol-support-x": { 1464 | "version": "1.4.2", 1465 | "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", 1466 | "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" 1467 | }, 1468 | "has-to-string-tag-x": { 1469 | "version": "1.4.1", 1470 | "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", 1471 | "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", 1472 | "requires": { 1473 | "has-symbol-support-x": "^1.4.1" 1474 | } 1475 | }, 1476 | "http-cache-semantics": { 1477 | "version": "3.8.1", 1478 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", 1479 | "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" 1480 | }, 1481 | "ieee754": { 1482 | "version": "1.2.1", 1483 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 1484 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" 1485 | }, 1486 | "inherits": { 1487 | "version": "2.0.4", 1488 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1489 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1490 | }, 1491 | "into-stream": { 1492 | "version": "3.1.0", 1493 | "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", 1494 | "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", 1495 | "requires": { 1496 | "from2": "^2.1.1", 1497 | "p-is-promise": "^1.1.0" 1498 | } 1499 | }, 1500 | "is-natural-number": { 1501 | "version": "4.0.1", 1502 | "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", 1503 | "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" 1504 | }, 1505 | "is-object": { 1506 | "version": "1.0.2", 1507 | "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", 1508 | "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==" 1509 | }, 1510 | "is-plain-obj": { 1511 | "version": "1.1.0", 1512 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", 1513 | "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" 1514 | }, 1515 | "is-retry-allowed": { 1516 | "version": "1.2.0", 1517 | "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", 1518 | "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" 1519 | }, 1520 | "is-stream": { 1521 | "version": "1.1.0", 1522 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 1523 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" 1524 | }, 1525 | "isarray": { 1526 | "version": "1.0.0", 1527 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1528 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 1529 | }, 1530 | "isurl": { 1531 | "version": "1.0.0", 1532 | "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", 1533 | "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", 1534 | "requires": { 1535 | "has-to-string-tag-x": "^1.2.0", 1536 | "is-object": "^1.0.1" 1537 | } 1538 | }, 1539 | "json-buffer": { 1540 | "version": "3.0.0", 1541 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", 1542 | "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" 1543 | }, 1544 | "keyv": { 1545 | "version": "3.0.0", 1546 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", 1547 | "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", 1548 | "requires": { 1549 | "json-buffer": "3.0.0" 1550 | } 1551 | }, 1552 | "lodash": { 1553 | "version": "4.17.21", 1554 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1555 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 1556 | }, 1557 | "lowercase-keys": { 1558 | "version": "1.0.1", 1559 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 1560 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" 1561 | }, 1562 | "make-dir": { 1563 | "version": "2.1.0", 1564 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", 1565 | "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", 1566 | "requires": { 1567 | "pify": "^4.0.1", 1568 | "semver": "^5.6.0" 1569 | } 1570 | }, 1571 | "mime-db": { 1572 | "version": "1.51.0", 1573 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", 1574 | "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" 1575 | }, 1576 | "mimic-response": { 1577 | "version": "1.0.1", 1578 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 1579 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" 1580 | }, 1581 | "normalize-url": { 1582 | "version": "2.0.1", 1583 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", 1584 | "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", 1585 | "requires": { 1586 | "prepend-http": "^2.0.0", 1587 | "query-string": "^5.0.1", 1588 | "sort-keys": "^2.0.0" 1589 | }, 1590 | "dependencies": { 1591 | "sort-keys": { 1592 | "version": "2.0.0", 1593 | "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", 1594 | "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", 1595 | "requires": { 1596 | "is-plain-obj": "^1.0.0" 1597 | } 1598 | } 1599 | } 1600 | }, 1601 | "object-assign": { 1602 | "version": "4.1.1", 1603 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1604 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 1605 | }, 1606 | "once": { 1607 | "version": "1.4.0", 1608 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1609 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1610 | "requires": { 1611 | "wrappy": "1" 1612 | } 1613 | }, 1614 | "p-cancelable": { 1615 | "version": "0.4.1", 1616 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", 1617 | "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==" 1618 | }, 1619 | "p-event": { 1620 | "version": "2.3.1", 1621 | "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", 1622 | "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", 1623 | "requires": { 1624 | "p-timeout": "^2.0.1" 1625 | } 1626 | }, 1627 | "p-finally": { 1628 | "version": "1.0.0", 1629 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 1630 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" 1631 | }, 1632 | "p-is-promise": { 1633 | "version": "1.1.0", 1634 | "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", 1635 | "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=" 1636 | }, 1637 | "p-timeout": { 1638 | "version": "2.0.1", 1639 | "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", 1640 | "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", 1641 | "requires": { 1642 | "p-finally": "^1.0.0" 1643 | } 1644 | }, 1645 | "pend": { 1646 | "version": "1.2.0", 1647 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 1648 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" 1649 | }, 1650 | "pify": { 1651 | "version": "4.0.1", 1652 | "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", 1653 | "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" 1654 | }, 1655 | "pinkie": { 1656 | "version": "2.0.4", 1657 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 1658 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" 1659 | }, 1660 | "pinkie-promise": { 1661 | "version": "2.0.1", 1662 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 1663 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 1664 | "requires": { 1665 | "pinkie": "^2.0.0" 1666 | } 1667 | }, 1668 | "prepend-http": { 1669 | "version": "2.0.0", 1670 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", 1671 | "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" 1672 | }, 1673 | "process-nextick-args": { 1674 | "version": "2.0.1", 1675 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 1676 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 1677 | }, 1678 | "pump": { 1679 | "version": "3.0.0", 1680 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 1681 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 1682 | "requires": { 1683 | "end-of-stream": "^1.1.0", 1684 | "once": "^1.3.1" 1685 | } 1686 | }, 1687 | "query-string": { 1688 | "version": "5.1.1", 1689 | "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", 1690 | "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", 1691 | "requires": { 1692 | "decode-uri-component": "^0.2.0", 1693 | "object-assign": "^4.1.0", 1694 | "strict-uri-encode": "^1.0.0" 1695 | } 1696 | }, 1697 | "readable-stream": { 1698 | "version": "2.3.7", 1699 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 1700 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 1701 | "requires": { 1702 | "core-util-is": "~1.0.0", 1703 | "inherits": "~2.0.3", 1704 | "isarray": "~1.0.0", 1705 | "process-nextick-args": "~2.0.0", 1706 | "safe-buffer": "~5.1.1", 1707 | "string_decoder": "~1.1.1", 1708 | "util-deprecate": "~1.0.1" 1709 | } 1710 | }, 1711 | "responselike": { 1712 | "version": "1.0.2", 1713 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", 1714 | "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", 1715 | "requires": { 1716 | "lowercase-keys": "^1.0.0" 1717 | } 1718 | }, 1719 | "safe-buffer": { 1720 | "version": "5.1.2", 1721 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1722 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1723 | }, 1724 | "seek-bzip": { 1725 | "version": "1.0.6", 1726 | "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", 1727 | "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", 1728 | "requires": { 1729 | "commander": "^2.8.1" 1730 | } 1731 | }, 1732 | "semver": { 1733 | "version": "5.7.1", 1734 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1735 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 1736 | }, 1737 | "sort-keys": { 1738 | "version": "1.1.2", 1739 | "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", 1740 | "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", 1741 | "requires": { 1742 | "is-plain-obj": "^1.0.0" 1743 | } 1744 | }, 1745 | "sort-keys-length": { 1746 | "version": "1.0.1", 1747 | "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", 1748 | "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", 1749 | "requires": { 1750 | "sort-keys": "^1.0.0" 1751 | } 1752 | }, 1753 | "strict-uri-encode": { 1754 | "version": "1.1.0", 1755 | "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", 1756 | "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" 1757 | }, 1758 | "string_decoder": { 1759 | "version": "1.1.1", 1760 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1761 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1762 | "requires": { 1763 | "safe-buffer": "~5.1.0" 1764 | } 1765 | }, 1766 | "strip-dirs": { 1767 | "version": "2.1.0", 1768 | "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", 1769 | "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", 1770 | "requires": { 1771 | "is-natural-number": "^4.0.1" 1772 | } 1773 | }, 1774 | "strip-outer": { 1775 | "version": "1.0.1", 1776 | "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", 1777 | "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", 1778 | "requires": { 1779 | "escape-string-regexp": "^1.0.2" 1780 | } 1781 | }, 1782 | "tar-stream": { 1783 | "version": "1.6.2", 1784 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", 1785 | "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", 1786 | "requires": { 1787 | "bl": "^1.0.0", 1788 | "buffer-alloc": "^1.2.0", 1789 | "end-of-stream": "^1.0.0", 1790 | "fs-constants": "^1.0.0", 1791 | "readable-stream": "^2.3.0", 1792 | "to-buffer": "^1.1.1", 1793 | "xtend": "^4.0.0" 1794 | } 1795 | }, 1796 | "through": { 1797 | "version": "2.3.8", 1798 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 1799 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" 1800 | }, 1801 | "timed-out": { 1802 | "version": "4.0.1", 1803 | "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", 1804 | "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" 1805 | }, 1806 | "to-buffer": { 1807 | "version": "1.1.1", 1808 | "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", 1809 | "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" 1810 | }, 1811 | "trim-repeated": { 1812 | "version": "1.0.0", 1813 | "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", 1814 | "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", 1815 | "requires": { 1816 | "escape-string-regexp": "^1.0.2" 1817 | } 1818 | }, 1819 | "unbzip2-stream": { 1820 | "version": "1.4.3", 1821 | "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", 1822 | "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", 1823 | "requires": { 1824 | "buffer": "^5.2.1", 1825 | "through": "^2.3.8" 1826 | } 1827 | }, 1828 | "url-parse-lax": { 1829 | "version": "3.0.0", 1830 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", 1831 | "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", 1832 | "requires": { 1833 | "prepend-http": "^2.0.0" 1834 | } 1835 | }, 1836 | "url-to-options": { 1837 | "version": "1.0.1", 1838 | "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", 1839 | "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" 1840 | }, 1841 | "util-deprecate": { 1842 | "version": "1.0.2", 1843 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1844 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1845 | }, 1846 | "wrappy": { 1847 | "version": "1.0.2", 1848 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1849 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1850 | }, 1851 | "xtend": { 1852 | "version": "4.0.2", 1853 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1854 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" 1855 | }, 1856 | "yauzl": { 1857 | "version": "2.10.0", 1858 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 1859 | "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", 1860 | "requires": { 1861 | "buffer-crc32": "~0.2.3", 1862 | "fd-slicer": "~1.1.0" 1863 | } 1864 | } 1865 | } 1866 | } 1867 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "an-array-of-english-words": "^2.0.0", 4 | "download": "^8.0.0", 5 | "lodash": "^4.17.21" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /predict.py: -------------------------------------------------------------------------------- 1 | import json 2 | import urllib 3 | 4 | import joblib 5 | from cog import BasePredictor, Input 6 | from preprocess import file_to_feature_vector 7 | 8 | class Predictor(BasePredictor): 9 | def setup(self): 10 | print("loading pickled classifier") 11 | self.clf = joblib.load("model.pkl") 12 | 13 | def predict(self, 14 | username: str = Input(description="GitHub username") 15 | ) -> str: 16 | # load the image 17 | href = f"https://github.com/{username}.png" 18 | filename = f"{username}.png" 19 | urllib.request.urlretrieve(href, filename) 20 | 21 | # create a feature vector from the image 22 | feature_vector = file_to_feature_vector(filename) 23 | 24 | # classify that mofo 25 | prediction = self.clf.predict([feature_vector])[0] 26 | 27 | output = json.dumps({ 28 | "username": username, 29 | "href": href, 30 | "prediction": "default" if prediction == 1 else "custom" 31 | }, indent=2) 32 | 33 | return output 34 | -------------------------------------------------------------------------------- /preprocess.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | from PIL import Image 3 | 4 | def get_rgb_array(path): 5 | """ 6 | open the image with pillow and use numpy to extra an array of RGB pixel data 7 | """ 8 | image = Image.open(path) 9 | image = image.resize((16, 16), resample=Image.NEAREST) 10 | image = image.convert("RGB") 11 | data = image.getdata() 12 | return np.array(data) 13 | 14 | 15 | def get_unique_color_count(rgb_array): 16 | """get unique rows (axis=0 is row, axis=1 is column)""" 17 | unique_colors = np.unique(rgb_array, axis=0) 18 | return len(unique_colors) 19 | 20 | def get_github_grey_count(rgb_array): 21 | """count the number of pixels that are GitHub Grey™""" 22 | github_grey = [240, 240, 240] 23 | 24 | # we have a two-dimensional array where each row is a RGB array 25 | # np.all() returns an array of booleans where each value is true if 26 | # all of the values in the corresponding row match GitHub grey. 27 | # 28 | # PS numpy overrides the equality operator! 🤯 29 | return np.sum(np.all(rgb_array == github_grey, axis=1)) 30 | 31 | def file_to_feature_vector(path): 32 | rgb_array = get_rgb_array(path) 33 | unique_color_count = get_unique_color_count(rgb_array) 34 | grey_count = get_github_grey_count(rgb_array) 35 | return [grey_count, unique_color_count] -------------------------------------------------------------------------------- /script/build: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e # stop execution if a command or pipeline has an error 3 | set -x # print statements as they're being executed 4 | 5 | # Convert the Jupyter notebook to a Python script 6 | docker run --volume $PWD:/src --interactive --tty cog-github-avatars jupyter nbconvert --to script notebook_v2.ipynb 7 | 8 | # Build the Cog Docker image 9 | cog build -------------------------------------------------------------------------------- /script/collect.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const { chain } = require('lodash') 4 | const words = require('an-array-of-english-words') 5 | const usernames = chain(words).shuffle().filter(word => word.length < 6).value().slice(0, 100) 6 | const download = require('download') 7 | 8 | async function main () { 9 | console.log(usernames) 10 | for (const username of usernames) { 11 | console.log(username) 12 | await download(`https://github.com/${username}.png`, '../avatars').catch(err => { 13 | // 404 who cares 14 | }) 15 | } 16 | } 17 | 18 | main() -------------------------------------------------------------------------------- /script/start: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e # stop execution if a command or pipeline has an error 3 | set -x # print statements as they're being executed 4 | 5 | # requires cog >= 0.1.5 6 | cog run -p 8888 --debug jupyter notebook --allow-root --ip=0.0.0.0 7 | 8 | # equivalent docker command: 9 | # docker run -p 8888:8888 --volume $PWD:/src --interactive --tty cog-github-avatars jupyter notebook --allow-root --ip=0.0.0.0 10 | 11 | -------------------------------------------------------------------------------- /script/test: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e # stop execution if a command or pipeline has an error 3 | set -x # print statements as they're being executed 4 | 5 | cog predict -i username=zeke -------------------------------------------------------------------------------- /smoke-tests/andreasjansson.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/smoke-tests/andreasjansson.png -------------------------------------------------------------------------------- /smoke-tests/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeke/github-avatars/cadcc6dec86f076ed199a63c97a63d449fe5cb4b/smoke-tests/default.png --------------------------------------------------------------------------------