/*!
 *  Material Design Iconic Font 1.0.1 by Sergey Kupletsky (@zavoloklom) - http://zavoloklom.github.io/material-design-iconic-font/
 *  License - https://github.com/zavoloklom/material-design-iconic-font/blob/gh-pages/License.md (Attribution-ShareAlike 4.0 International license)
 */
@font-face {
  font-family: 'Material Design Iconic Font';
  src: url('../fonts/Material-Design-Iconic-Font.eot?v=1.0.1');
  src: url('../fonts/Material-Design-Iconic-Font.eot?#iefix&v=1.0.1') format('embedded-opentype'), url('../fonts/Material-Design-Iconic-Font.woff?v=1.0.1') format('woff'), url('../fonts/Material-Design-Iconic-Font.ttf?v=1.0.1') format('truetype'), url('../fonts/Material-Design-Iconic-Font.svg?v=1.0.1#Material-Design-Iconic-Font') format('svg');
  font-weight: normal;
  font-style: normal;
}
[class^="md-"],
[class*=" md-"] {
  display: inline-block;
  font: normal normal normal 14px/1 'Material Design Iconic Font';
  font-size: inherit;
  speak: none;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.md {
  line-height: inherit;
  vertical-align: bottom;
}
.md-lg {
  font-size: 1.5em;
  line-height: .5em;
  vertical-align: -35%;
}
.md-2x {
  font-size: 2em;
}
.md-3x {
  font-size: 3em;
}
.md-4x {
  font-size: 4em;
}
.md-5x {
  font-size: 5em;
}
.md-border {
  padding: .2em .25em .15em;
  border: solid 0.08em #808080;
  border-radius: .1em;
}
.md-border-circle {
  padding: .2em .25em .15em;
  border: solid 0.08em #808080;
  border-radius: 50%;
}
[class^="md-"].pull-left,
[class*=" md-"].pull-left {
  float: left;
  margin-right: .3em;
}
[class^="md-"].pull-right,
[class*=" md-"].pull-right {
  float: right;
  margin-left: .3em;
}
.md-spin {
  -webkit-animation: md-spin 1.5s infinite linear;
  animation: md-spin 1.5s infinite linear;
}
.md-spin-reverse {
  -webkit-animation: md-spin-reverse 1.5s infinite linear;
  animation: md-spin-reverse 1.5s infinite linear;
}
@-webkit-keyframes md-spin {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(359deg);
    transform: rotate(359deg);
  }
}
@keyframes md-spin {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(359deg);
    transform: rotate(359deg);
  }
}
@-webkit-keyframes md-spin-reverse {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(-359deg);
    transform: rotate(-359deg);
  }
}
@keyframes md-spin-reverse {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(-359deg);
    transform: rotate(-359deg);
  }
}
.md-rotate-90 {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
  -webkit-transform: rotate(90deg);
  -ms-transform: rotate(90deg);
  transform: rotate(90deg);
}
.md-rotate-180 {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
  -webkit-transform: rotate(180deg);
  -ms-transform: rotate(180deg);
  transform: rotate(180deg);
}
.md-rotate-270 {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
  -webkit-transform: rotate(270deg);
  -ms-transform: rotate(270deg);
  transform: rotate(270deg);
}
.md-flip-horizontal {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
  -webkit-transform: scale(-1, 1);
  -ms-transform: scale(-1, 1);
  transform: scale(-1, 1);
}
.md-flip-vertical {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
  -webkit-transform: scale(1, -1);
  -ms-transform: scale(1, -1);
  transform: scale(1, -1);
}
:root .md-rotate-90,
:root .md-rotate-180,
:root .md-rotate-270,
:root .md-flip-horizontal,
:root .md-flip-vertical {
  filter: none;
}
/* Material Design Iconic Font uses the Unicode Private Use Area (PUA) to ensure screen
   readers do not read off random characters that represent icons */
/* If you do not want use all icons you can disable icon set here */
.md-3d-rotation:before {
  content: "\f000";
}
.md-accessibility:before {
  content: "\f001";
}
.md-account-balance:before {
  content: "\f002";
}
.md-account-balance-wallet:before {
  content: "\f003";
}
.md-account-box:before {
  content: "\f004";
}
.md-account-child:before {
  content: "\f005";
}
.md-account-circle:before {
  content: "\f006";
}
.md-add-shopping-cart:before {
  content: "\f007";
}
.md-alarm:before {
  content: "\f008";
}
.md-alarm-add:before {
  content: "\f009";
}
.md-alarm-off:before {
  content: "\f00a";
}
.md-alarm-on:before {
  content: "\f00b";
}
.md-android:before {
  content: "\f00c";
}
.md-announcement:before {
  content: "\f00d";
}
.md-aspect-ratio:before {
  content: "\f00e";
}
.md-assessment:before {
  content: "\f00f";
}
.md-assignment:before {
  content: "\f010";
}
.md-assignment-ind:before {
  content: "\f011";
}
.md-assignment-late:before {
  content: "\f012";
}
.md-assignment-return:before {
  content: "\f013";
}
.md-assignment-returned:before {
  content: "\f014";
}
.md-assignment-turned-in:before {
  content: "\f015";
}
.md-autorenew:before {
  content: "\f016";
}
.md-backup:before {
  content: "\f017";
}
.md-book:before {
  content: "\f018";
}
.md-bookmark:before {
  content: "\f019";
}
.md-bookmark-outline:before {
  content: "\f01a";
}
.md-bug-report:before {
  content: "\f01b";
}
.md-cached:before {
  content: "\f01c";
}
.md-class:before {
  content: "\f01d";
}
.md-credit-card:before {
  content: "\f01e";
}
.md-dashboard:before {
  content: "\f01f";
}
.md-delete:before {
  content: "\f020";
}
.md-description:before {
  content: "\f021";
}
.md-dns:before {
  content: "\f022";
}
.md-done:before {
  content: "\f023";
}
.md-done-all:before {
  content: "\f024";
}
.md-event:before {
  content: "\f025";
}
.md-exit-to-app:before {
  content: "\f026";
}
.md-explore:before {
  content: "\f027";
}
.md-extension:before {
  content: "\f028";
}
.md-face-unlock:before {
  content: "\f029";
}
.md-favorite:before {
  content: "\f02a";
}
.md-favorite-outline:before {
  content: "\f02b";
}
.md-find-in-page:before {
  content: "\f02c";
}
.md-find-replace:before {
  content: "\f02d";
}
.md-flip-to-back:before {
  content: "\f02e";
}
.md-flip-to-front:before {
  content: "\f02f";
}
.md-get-app:before {
  content: "\f030";
}
.md-grade:before {
  content: "\f031";
}
.md-group-work:before {
  content: "\f032";
}
.md-help:before {
  content: "\f033";
}
.md-highlight-remove:before {
  content: "\f034";
}
.md-history:before {
  content: "\f035";
}
.md-home:before {
  content: "\f036";
}
.md-https:before {
  content: "\f037";
}
.md-info:before {
  content: "\f038";
}
.md-info-outline:before {
  content: "\f039";
}
.md-input:before {
  content: "\f03a";
}
.md-invert-colors:before {
  content: "\f03b";
}
.md-label:before {
  content: "\f03c";
}
.md-label-outline:before {
  content: "\f03d";
}
.md-language:before {
  content: "\f03e";
}
.md-launch:before {
  content: "\f03f";
}
.md-list:before {
  content: "\f040";
}
.md-lock:before {
  content: "\f041";
}
.md-lock-open:before {
  content: "\f042";
}
.md-lock-outline:before {
  content: "\f043";
}
.md-loyalty:before {
  content: "\f044";
}
.md-markunread-mailbox:before {
  content: "\f045";
}
.md-note-add:before {
  content: "\f046";
}
.md-open-in-browser:before {
  content: "\f047";
}
.md-open-in-new:before {
  content: "\f048";
}
.md-open-with:before {
  content: "\f049";
}
.md-pageview:before {
  content: "\f04a";
}
.md-payment:before {
  content: "\f04b";
}
.md-perm-camera-mic:before {
  content: "\f04c";
}
.md-perm-contact-cal:before {
  content: "\f04d";
}
.md-perm-data-setting:before {
  content: "\f04e";
}
.md-perm-device-info:before {
  content: "\f04f";
}
.md-perm-identity:before {
  content: "\f050";
}
.md-perm-media:before {
  content: "\f051";
}
.md-perm-phone-msg:before {
  content: "\f052";
}
.md-perm-scan-wifi:before {
  content: "\f053";
}
.md-picture-in-picture:before {
  content: "\f054";
}
.md-polymer:before {
  content: "\f055";
}
.md-print:before {
  content: "\f056";
}
.md-query-builder:before {
  content: "\f057";
}
.md-question-answer:before {
  content: "\f058";
}
.md-receipt:before {
  content: "\f059";
}
.md-redeem:before {
  content: "\f05a";
}
.md-report-problem:before {
  content: "\f05b";
}
.md-restore:before {
  content: "\f05c";
}
.md-room:before {
  content: "\f05d";
}
.md-schedule:before {
  content: "\f05e";
}
.md-search:before {
  content: "\f05f";
}
.md-settings:before {
  content: "\f060";
}
.md-settings-applications:before {
  content: "\f061";
}
.md-settings-backup-restore:before {
  content: "\f062";
}
.md-settings-bluetooth:before {
  content: "\f063";
}
.md-settings-cell:before {
  content: "\f064";
}
.md-settings-display:before {
  content: "\f065";
}
.md-settings-ethernet:before {
  content: "\f066";
}
.md-settings-input-antenna:before {
  content: "\f067";
}
.md-settings-input-component:before {
  content: "\f068";
}
.md-settings-input-composite:before {
  content: "\f069";
}
.md-settings-input-hdmi:before {
  content: "\f06a";
}
.md-settings-input-svideo:before {
  content: "\f06b";
}
.md-settings-overscan:before {
  content: "\f06c";
}
.md-settings-phone:before {
  content: "\f06d";
}
.md-settings-power:before {
  content: "\f06e";
}
.md-settings-remote:before {
  content: "\f06f";
}
.md-settings-voice:before {
  content: "\f070";
}
.md-shop:before {
  content: "\f071";
}
.md-shopping-basket:before {
  content: "\f072";
}
.md-shopping-cart:before {
  content: "\f073";
}
.md-shop-two:before {
  content: "\f074";
}
.md-speaker-notes:before {
  content: "\f075";
}
.md-spellcheck:before {
  content: "\f076";
}
.md-star-rate:before {
  content: "\f077";
}
.md-stars:before {
  content: "\f078";
}
.md-store:before {
  content: "\f079";
}
.md-subject:before {
  content: "\f07a";
}
.md-swap-horiz:before {
  content: "\f07b";
}
.md-swap-vert:before {
  content: "\f07c";
}
.md-swap-vert-circle:before {
  content: "\f07d";
}
.md-system-update-tv:before {
  content: "\f07e";
}
.md-tab:before {
  content: "\f07f";
}
.md-tab-unselected:before {
  content: "\f080";
}
.md-theaters:before {
  content: "\f081";
}
.md-thumb-down:before {
  content: "\f082";
}
.md-thumbs-up-down:before {
  content: "\f083";
}
.md-thumb-up:before {
  content: "\f084";
}
.md-toc:before {
  content: "\f085";
}
.md-today:before {
  content: "\f086";
}
.md-track-changes:before {
  content: "\f087";
}
.md-translate:before {
  content: "\f088";
}
.md-trending-down:before {
  content: "\f089";
}
.md-trending-neutral:before {
  content: "\f08a";
}
.md-trending-up:before {
  content: "\f08b";
}
.md-turned-in:before {
  content: "\f08c";
}
.md-turned-in-not:before {
  content: "\f08d";
}
.md-verified-user:before {
  content: "\f08e";
}
.md-view-agenda:before {
  content: "\f08f";
}
.md-view-array:before {
  content: "\f090";
}
.md-view-carousel:before {
  content: "\f091";
}
.md-view-column:before {
  content: "\f092";
}
.md-view-day:before {
  content: "\f093";
}
.md-view-headline:before {
  content: "\f094";
}
.md-view-list:before {
  content: "\f095";
}
.md-view-module:before {
  content: "\f096";
}
.md-view-quilt:before {
  content: "\f097";
}
.md-view-stream:before {
  content: "\f098";
}
.md-view-week:before {
  content: "\f099";
}
.md-visibility:before {
  content: "\f09a";
}
.md-visibility-off:before {
  content: "\f09b";
}
.md-wallet-giftcard:before {
  content: "\f09c";
}
.md-wallet-membership:before {
  content: "\f09d";
}
.md-wallet-travel:before {
  content: "\f09e";
}
.md-work:before {
  content: "\f09f";
}
.md-error:before {
  content: "\f0a0";
}
.md-warning:before {
  content: "\f0a1";
}
.md-album:before {
  content: "\f0a2";
}
.md-av-timer:before {
  content: "\f0a3";
}
.md-closed-caption:before {
  content: "\f0a4";
}
.md-equalizer:before {
  content: "\f0a5";
}
.md-explicit:before {
  content: "\f0a6";
}
.md-fast-forward:before {
  content: "\f0a7";
}
.md-fast-rewind:before {
  content: "\f0a8";
}
.md-games:before {
  content: "\f0a9";
}
.md-hearing:before {
  content: "\f0aa";
}
.md-high-quality:before {
  content: "\f0ab";
}
.md-loop:before {
  content: "\f0ac";
}
.md-mic:before {
  content: "\f0ad";
}
.md-mic-none:before {
  content: "\f0ae";
}
.md-mic-off:before {
  content: "\f0af";
}
.md-movie:before {
  content: "\f0b0";
}
.md-my-library-add:before {
  content: "\f0b1";
}
.md-my-library-books:before {
  content: "\f0b2";
}
.md-my-library-music:before {
  content: "\f0b3";
}
.md-new-releases:before {
  content: "\f0b4";
}
.md-not-interested:before {
  content: "\f0b5";
}
.md-pause:before {
  content: "\f0b6";
}
.md-pause-circle-fill:before {
  content: "\f0b7";
}
.md-pause-circle-outline:before {
  content: "\f0b8";
}
.md-play-arrow:before {
  content: "\f0b9";
}
.md-play-circle-fill:before {
  content: "\f0ba";
}
.md-play-circle-outline:before {
  content: "\f0bb";
}
.md-playlist-add:before {
  content: "\f0bc";
}
.md-play-shopping-bag:before {
  content: "\f0bd";
}
.md-queue:before {
  content: "\f0be";
}
.md-queue-music:before {
  content: "\f0bf";
}
.md-radio:before {
  content: "\f0c0";
}
.md-recent-actors:before {
  content: "\f0c1";
}
.md-repeat:before {
  content: "\f0c2";
}
.md-repeat-one:before {
  content: "\f0c3";
}
.md-replay:before {
  content: "\f0c4";
}
.md-shuffle:before {
  content: "\f0c5";
}
.md-skip-next:before {
  content: "\f0c6";
}
.md-skip-previous:before {
  content: "\f0c7";
}
.md-snooze:before {
  content: "\f0c8";
}
.md-stop:before {
  content: "\f0c9";
}
.md-subtitles:before {
  content: "\f0ca";
}
.md-surround-sound:before {
  content: "\f0cb";
}
.md-videocam:before {
  content: "\f0cc";
}
.md-videocam-off:before {
  content: "\f0cd";
}
.md-video-collection:before {
  content: "\f0ce";
}
.md-volume-down:before {
  content: "\f0cf";
}
.md-volume-mute:before {
  content: "\f0d0";
}
.md-volume-off:before {
  content: "\f0d1";
}
.md-volume-up:before {
  content: "\f0d2";
}
.md-web:before {
  content: "\f0d3";
}
.md-business:before {
  content: "\f0d4";
}
.md-call:before {
  content: "\f0d5";
}
.md-call-end:before {
  content: "\f0d6";
}
.md-call-made:before {
  content: "\f0d7";
}
.md-call-merge:before {
  content: "\f0d8";
}
.md-call-missed:before {
  content: "\f0d9";
}
.md-call-received:before {
  content: "\f0da";
}
.md-call-split:before {
  content: "\f0db";
}
.md-chat:before {
  content: "\f0dc";
}
.md-clear-all:before {
  content: "\f0dd";
}
.md-comment:before {
  content: "\f0de";
}
.md-contacts:before {
  content: "\f0df";
}
.md-dialer-sip:before {
  content: "\f0e0";
}
.md-dialpad:before {
  content: "\f0e1";
}
.md-dnd-on:before {
  content: "\f0e2";
}
.md-email:before {
  content: "\f0e3";
}
.md-forum:before {
  content: "\f0e4";
}
.md-import-export:before {
  content: "\f0e5";
}
.md-invert-colors-off:before {
  content: "\f0e6";
}
.md-invert-colors-on:before {
  content: "\f0e7";
}
.md-live-help:before {
  content: "\f0e8";
}
.md-location-off:before {
  content: "\f0e9";
}
.md-location-on:before {
  content: "\f0ea";
}
.md-message:before {
  content: "\f0eb";
}
.md-messenger:before {
  content: "\f0ec";
}
.md-no-sim:before {
  content: "\f0ed";
}
.md-phone:before {
  content: "\f0ee";
}
.md-portable-wifi-off:before {
  content: "\f0ef";
}
.md-quick-contacts-dialer:before {
  content: "\f0f0";
}
.md-quick-contacts-mail:before {
  content: "\f0f1";
}
.md-ring-volume:before {
  content: "\f0f2";
}
.md-stay-current-landscape:before {
  content: "\f0f3";
}
.md-stay-current-portrait:before {
  content: "\f0f4";
}
.md-stay-primary-landscape:before {
  content: "\f0f5";
}
.md-stay-primary-portrait:before {
  content: "\f0f6";
}
.md-swap-calls:before {
  content: "\f0f7";
}
.md-textsms:before {
  content: "\f0f8";
}
.md-voicemail:before {
  content: "\f0f9";
}
.md-vpn-key:before {
  content: "\f0fa";
}
.md-add:before {
  content: "\f0fb";
}
.md-add-box:before {
  content: "\f0fc";
}
.md-add-circle:before {
  content: "\f0fd";
}
.md-add-circle-outline:before {
  content: "\f0fe";
}
.md-archive:before {
  content: "\f0ff";
}
.md-backspace:before {
  content: "\f100";
}
.md-block:before {
  content: "\f101";
}
.md-clear:before {
  content: "\f102";
}
.md-content-copy:before {
  content: "\f103";
}
.md-content-cut:before {
  content: "\f104";
}
.md-content-paste:before {
  content: "\f105";
}
.md-create:before {
  content: "\f106";
}
.md-drafts:before {
  content: "\f107";
}
.md-filter-list:before {
  content: "\f108";
}
.md-flag:before {
  content: "\f109";
}
.md-forward:before {
  content: "\f10a";
}
.md-gesture:before {
  content: "\f10b";
}
.md-inbox:before {
  content: "\f10c";
}
.md-link:before {
  content: "\f10d";
}
.md-mail:before {
  content: "\f10e";
}
.md-markunread:before {
  content: "\f10f";
}
.md-redo:before {
  content: "\f110";
}
.md-remove:before {
  content: "\f111";
}
.md-remove-circle:before {
  content: "\f112";
}
.md-remove-circle-outline:before {
  content: "\f113";
}
.md-reply:before {
  content: "\f114";
}
.md-reply-all:before {
  content: "\f115";
}
.md-report:before {
  content: "\f116";
}
.md-save:before {
  content: "\f117";
}
.md-select-all:before {
  content: "\f118";
}
.md-send:before {
  content: "\f119";
}
.md-sort:before {
  content: "\f11a";
}
.md-text-format:before {
  content: "\f11b";
}
.md-undo:before {
  content: "\f11c";
}
.md-access-alarm:before {
  content: "\f11d";
}
.md-access-alarms:before {
  content: "\f11e";
}
.md-access-time:before {
  content: "\f11f";
}
.md-add-alarm:before {
  content: "\f120";
}
.md-airplanemode-off:before {
  content: "\f121";
}
.md-airplanemode-on:before {
  content: "\f122";
}
.md-battery-20:before {
  content: "\f123";
}
.md-battery-30:before {
  content: "\f124";
}
.md-battery-50:before {
  content: "\f125";
}
.md-battery-60:before {
  content: "\f126";
}
.md-battery-80:before {
  content: "\f127";
}
.md-battery-90:before {
  content: "\f128";
}
.md-battery-alert:before {
  content: "\f129";
}
.md-battery-charging-20:before {
  content: "\f12a";
}
.md-battery-charging-30:before {
  content: "\f12b";
}
.md-battery-charging-50:before {
  content: "\f12c";
}
.md-battery-charging-60:before {
  content: "\f12d";
}
.md-battery-charging-80:before {
  content: "\f12e";
}
.md-battery-charging-90:before {
  content: "\f12f";
}
.md-battery-charging-full:before {
  content: "\f130";
}
.md-battery-full:before {
  content: "\f131";
}
.md-battery-std:before {
  content: "\f132";
}
.md-battery-unknown:before {
  content: "\f133";
}
.md-bluetooth:before {
  content: "\f134";
}
.md-bluetooth-connected:before {
  content: "\f135";
}
.md-bluetooth-disabled:before {
  content: "\f136";
}
.md-bluetooth-searching:before {
  content: "\f137";
}
.md-brightness-auto:before {
  content: "\f138";
}
.md-brightness-high:before {
  content: "\f139";
}
.md-brightness-low:before {
  content: "\f13a";
}
.md-brightness-medium:before {
  content: "\f13b";
}
.md-data-usage:before {
  content: "\f13c";
}
.md-developer-mode:before {
  content: "\f13d";
}
.md-devices:before {
  content: "\f13e";
}
.md-dvr:before {
  content: "\f13f";
}
.md-gps-fixed:before {
  content: "\f140";
}
.md-gps-not-fixed:before {
  content: "\f141";
}
.md-gps-off:before {
  content: "\f142";
}
.md-location-disabled:before {
  content: "\f143";
}
.md-location-searching:before {
  content: "\f144";
}
.md-multitrack-audio:before {
  content: "\f145";
}
.md-network-cell:before {
  content: "\f146";
}
.md-network-wifi:before {
  content: "\f147";
}
.md-nfc:before {
  content: "\f148";
}
.md-now-wallpaper:before {
  content: "\f149";
}
.md-now-widgets:before {
  content: "\f14a";
}
.md-screen-lock-landscape:before {
  content: "\f14b";
}
.md-screen-lock-portrait:before {
  content: "\f14c";
}
.md-screen-lock-rotation:before {
  content: "\f14d";
}
.md-screen-rotation:before {
  content: "\f14e";
}
.md-sd-storage:before {
  content: "\f14f";
}
.md-settings-system-daydream:before {
  content: "\f150";
}
.md-signal-cellular-0-bar:before {
  content: "\f151";
}
.md-signal-cellular-1-bar:before {
  content: "\f152";
}
.md-signal-cellular-2-bar:before {
  content: "\f153";
}
.md-signal-cellular-3-bar:before {
  content: "\f154";
}
.md-signal-cellular-4-bar:before {
  content: "\f155";
}
.md-signal-cellular-connected-no-internet-0-bar:before {
  content: "\f156";
}
.md-signal-cellular-connected-no-internet-1-bar:before {
  content: "\f157";
}
.md-signal-cellular-connected-no-internet-2-bar:before {
  content: "\f158";
}
.md-signal-cellular-connected-no-internet-3-bar:before {
  content: "\f159";
}
.md-signal-cellular-connected-no-internet-4-bar:before {
  content: "\f15a";
}
.md-signal-cellular-no-sim:before {
  content: "\f15b";
}
.md-signal-cellular-null:before {
  content: "\f15c";
}
.md-signal-cellular-off:before {
  content: "\f15d";
}
.md-signal-wifi-0-bar:before {
  content: "\f15e";
}
.md-signal-wifi-1-bar:before {
  content: "\f15f";
}
.md-signal-wifi-2-bar:before {
  content: "\f160";
}
.md-signal-wifi-3-bar:before {
  content: "\f161";
}
.md-signal-wifi-4-bar:before {
  content: "\f162";
}
.md-signal-wifi-off:before {
  content: "\f163";
}
.md-storage:before {
  content: "\f164";
}
.md-usb:before {
  content: "\f165";
}
.md-wifi-lock:before {
  content: "\f166";
}
.md-wifi-tethering:before {
  content: "\f167";
}
.md-attach-file:before {
  content: "\f168";
}
.md-attach-money:before {
  content: "\f169";
}
.md-border-all:before {
  content: "\f16a";
}
.md-border-bottom:before {
  content: "\f16b";
}
.md-border-clear:before {
  content: "\f16c";
}
.md-border-color:before {
  content: "\f16d";
}
.md-border-horizontal:before {
  content: "\f16e";
}
.md-border-inner:before {
  content: "\f16f";
}
.md-border-left:before {
  content: "\f170";
}
.md-border-outer:before {
  content: "\f171";
}
.md-border-right:before {
  content: "\f172";
}
.md-border-style:before {
  content: "\f173";
}
.md-border-top:before {
  content: "\f174";
}
.md-border-vertical:before {
  content: "\f175";
}
.md-format-align-center:before {
  content: "\f176";
}
.md-format-align-justify:before {
  content: "\f177";
}
.md-format-align-left:before {
  content: "\f178";
}
.md-format-align-right:before {
  content: "\f179";
}
.md-format-bold:before {
  content: "\f17a";
}
.md-format-clear:before {
  content: "\f17b";
}
.md-format-color-fill:before {
  content: "\f17c";
}
.md-format-color-reset:before {
  content: "\f17d";
}
.md-format-color-text:before {
  content: "\f17e";
}
.md-format-indent-decrease:before {
  content: "\f17f";
}
.md-format-indent-increase:before {
  content: "\f180";
}
.md-format-italic:before {
  content: "\f181";
}
.md-format-line-spacing:before {
  content: "\f182";
}
.md-format-list-bulleted:before {
  content: "\f183";
}
.md-format-list-numbered:before {
  content: "\f184";
}
.md-format-paint:before {
  content: "\f185";
}
.md-format-quote:before {
  content: "\f186";
}
.md-format-size:before {
  content: "\f187";
}
.md-format-strikethrough:before {
  content: "\f188";
}
.md-format-textdirection-l-to-r:before {
  content: "\f189";
}
.md-format-textdirection-r-to-l:before {
  content: "\f18a";
}
.md-format-underline:before {
  content: "\f18b";
}
.md-functions:before {
  content: "\f18c";
}
.md-insert-chart:before {
  content: "\f18d";
}
.md-insert-comment:before {
  content: "\f18e";
}
.md-insert-drive-file:before {
  content: "\f18f";
}
.md-insert-emoticon:before {
  content: "\f190";
}
.md-insert-invitation:before {
  content: "\f191";
}
.md-insert-link:before {
  content: "\f192";
}
.md-insert-photo:before {
  content: "\f193";
}
.md-merge-type:before {
  content: "\f194";
}
.md-mode-comment:before {
  content: "\f195";
}
.md-mode-edit:before {
  content: "\f196";
}
.md-publish:before {
  content: "\f197";
}
.md-vertical-align-bottom:before {
  content: "\f198";
}
.md-vertical-align-center:before {
  content: "\f199";
}
.md-vertical-align-top:before {
  content: "\f19a";
}
.md-wrap-text:before {
  content: "\f19b";
}
.md-attachment:before {
  content: "\f19c";
}
.md-cloud:before {
  content: "\f19d";
}
.md-cloud-circle:before {
  content: "\f19e";
}
.md-cloud-done:before {
  content: "\f19f";
}
.md-cloud-download:before {
  content: "\f1a0";
}
.md-cloud-off:before {
  content: "\f1a1";
}
.md-cloud-queue:before {
  content: "\f1a2";
}
.md-cloud-upload:before {
  content: "\f1a3";
}
.md-file-download:before {
  content: "\f1a4";
}
.md-file-upload:before {
  content: "\f1a5";
}
.md-folder:before {
  content: "\f1a6";
}
.md-folder-open:before {
  content: "\f1a7";
}
.md-folder-shared:before {
  content: "\f1a8";
}
.md-cast:before {
  content: "\f1a9";
}
.md-cast-connected:before {
  content: "\f1aa";
}
.md-computer:before {
  content: "\f1ab";
}
.md-desktop-mac:before {
  content: "\f1ac";
}
.md-desktop-windows:before {
  content: "\f1ad";
}
.md-dock:before {
  content: "\f1ae";
}
.md-gamepad:before {
  content: "\f1af";
}
.md-headset:before {
  content: "\f1b0";
}
.md-headset-mic:before {
  content: "\f1b1";
}
.md-keyboard:before {
  content: "\f1b2";
}
.md-keyboard-alt:before {
  content: "\f1b3";
}
.md-keyboard-arrow-down:before {
  content: "\f1b4";
}
.md-keyboard-arrow-left:before {
  content: "\f1b5";
}
.md-keyboard-arrow-right:before {
  content: "\f1b6";
}
.md-keyboard-arrow-up:before {
  content: "\f1b7";
}
.md-keyboard-backspace:before {
  content: "\f1b8";
}
.md-keyboard-capslock:before {
  content: "\f1b9";
}
.md-keyboard-control:before {
  content: "\f1ba";
}
.md-keyboard-hide:before {
  content: "\f1bb";
}
.md-keyboard-return:before {
  content: "\f1bc";
}
.md-keyboard-tab:before {
  content: "\f1bd";
}
.md-keyboard-voice:before {
  content: "\f1be";
}
.md-laptop:before {
  content: "\f1bf";
}
.md-laptop-chromebook:before {
  content: "\f1c0";
}
.md-laptop-mac:before {
  content: "\f1c1";
}
.md-laptop-windows:before {
  content: "\f1c2";
}
.md-memory:before {
  content: "\f1c3";
}
.md-mouse:before {
  content: "\f1c4";
}
.md-phone-android:before {
  content: "\f1c5";
}
.md-phone-iphone:before {
  content: "\f1c6";
}
.md-phonelink:before {
  content: "\f1c7";
}
.md-phonelink-off:before {
  content: "\f1c8";
}
.md-security:before {
  content: "\f1c9";
}
.md-sim-card:before {
  content: "\f1ca";
}
.md-smartphone:before {
  content: "\f1cb";
}
.md-speaker:before {
  content: "\f1cc";
}
.md-tablet:before {
  content: "\f1cd";
}
.md-tablet-android:before {
  content: "\f1ce";
}
.md-tablet-mac:before {
  content: "\f1cf";
}
.md-tv:before {
  content: "\f1d0";
}
.md-watch:before {
  content: "\f1d1";
}
.md-add-to-photos:before {
  content: "\f1d2";
}
.md-adjust:before {
  content: "\f1d3";
}
.md-assistant-photo:before {
  content: "\f1d4";
}
.md-audiotrack:before {
  content: "\f1d5";
}
.md-blur-circular:before {
  content: "\f1d6";
}
.md-blur-linear:before {
  content: "\f1d7";
}
.md-blur-off:before {
  content: "\f1d8";
}
.md-blur-on:before {
  content: "\f1d9";
}
.md-brightness-1:before {
  content: "\f1da";
}
.md-brightness-2:before {
  content: "\f1db";
}
.md-brightness-3:before {
  content: "\f1dc";
}
.md-brightness-4:before {
  content: "\f1dd";
}
.md-brightness-5:before {
  content: "\f1de";
}
.md-brightness-6:before {
  content: "\f1df";
}
.md-brightness-7:before {
  content: "\f1e0";
}
.md-brush:before {
  content: "\f1e1";
}
.md-camera:before {
  content: "\f1e2";
}
.md-camera-alt:before {
  content: "\f1e3";
}
.md-camera-front:before {
  content: "\f1e4";
}
.md-camera-rear:before {
  content: "\f1e5";
}
.md-camera-roll:before {
  content: "\f1e6";
}
.md-center-focus-strong:before {
  content: "\f1e7";
}
.md-center-focus-weak:before {
  content: "\f1e8";
}
.md-collections:before {
  content: "\f1e9";
}
.md-colorize:before {
  content: "\f1ea";
}
.md-color-lens:before {
  content: "\f1eb";
}
.md-compare:before {
  content: "\f1ec";
}
.md-control-point:before {
  content: "\f1ed";
}
.md-control-point-duplicate:before {
  content: "\f1ee";
}
.md-crop:before {
  content: "\f1ef";
}
.md-crop-3-2:before {
  content: "\f1f0";
}
.md-crop-5-4:before {
  content: "\f1f1";
}
.md-crop-7-5:before {
  content: "\f1f2";
}
.md-crop-16-9:before {
  content: "\f1f3";
}
.md-crop-din:before {
  content: "\f1f4";
}
.md-crop-free:before {
  content: "\f1f5";
}
.md-crop-landscape:before {
  content: "\f1f6";
}
.md-crop-original:before {
  content: "\f1f7";
}
.md-crop-portrait:before {
  content: "\f1f8";
}
.md-crop-square:before {
  content: "\f1f9";
}
.md-dehaze:before {
  content: "\f1fa";
}
.md-details:before {
  content: "\f1fb";
}
.md-edit:before {
  content: "\f1fc";
}
.md-exposure:before {
  content: "\f1fd";
}
.md-exposure-minus-1:before {
  content: "\f1fe";
}
.md-exposure-minus-2:before {
  content: "\f1ff";
}
.md-exposure-zero:before {
  content: "\f200";
}
.md-exposure-plus-1:before {
  content: "\f201";
}
.md-exposure-plus-2:before {
  content: "\f202";
}
.md-filter:before {
  content: "\f203";
}
.md-filter-1:before {
  content: "\f204";
}
.md-filter-2:before {
  content: "\f205";
}
.md-filter-3:before {
  content: "\f206";
}
.md-filter-4:before {
  content: "\f207";
}
.md-filter-5:before {
  content: "\f208";
}
.md-filter-6:before {
  content: "\f209";
}
.md-filter-7:before {
  content: "\f20a";
}
.md-filter-8:before {
  content: "\f20b";
}
.md-filter-9:before {
  content: "\f20c";
}
.md-filter-9-plus:before {
  content: "\f20d";
}
.md-filter-b-and-w:before {
  content: "\f20e";
}
.md-filter-center-focus:before {
  content: "\f20f";
}
.md-filter-drama:before {
  content: "\f210";
}
.md-filter-frames:before {
  content: "\f211";
}
.md-filter-hdr:before {
  content: "\f212";
}
.md-filter-none:before {
  content: "\f213";
}
.md-filter-tilt-shift:before {
  content: "\f214";
}
.md-filter-vintage:before {
  content: "\f215";
}
.md-flare:before {
  content: "\f216";
}
.md-flash-auto:before {
  content: "\f217";
}
.md-flash-off:before {
  content: "\f218";
}
.md-flash-on:before {
  content: "\f219";
}
.md-flip:before {
  content: "\f21a";
}
.md-gradient:before {
  content: "\f21b";
}
.md-grain:before {
  content: "\f21c";
}
.md-grid-off:before {
  content: "\f21d";
}
.md-grid-on:before {
  content: "\f21e";
}
.md-hdr-off:before {
  content: "\f21f";
}
.md-hdr-on:before {
  content: "\f220";
}
.md-hdr-strong:before {
  content: "\f221";
}
.md-hdr-weak:before {
  content: "\f222";
}
.md-healing:before {
  content: "\f223";
}
.md-image:before {
  content: "\f224";
}
.md-image-aspect-ratio:before {
  content: "\f225";
}
.md-iso:before {
  content: "\f226";
}
.md-landscape:before {
  content: "\f227";
}
.md-leak-add:before {
  content: "\f228";
}
.md-leak-remove:before {
  content: "\f229";
}
.md-lens:before {
  content: "\f22a";
}
.md-looks:before {
  content: "\f22b";
}
.md-looks-1:before {
  content: "\f22c";
}
.md-looks-2:before {
  content: "\f22d";
}
.md-looks-3:before {
  content: "\f22e";
}
.md-looks-4:before {
  content: "\f22f";
}
.md-looks-5:before {
  content: "\f230";
}
.md-looks-6:before {
  content: "\f231";
}
.md-loupe:before {
  content: "\f232";
}
.md-movie-creation:before {
  content: "\f233";
}
.md-nature:before {
  content: "\f234";
}
.md-nature-people:before {
  content: "\f235";
}
.md-navigate-before:before {
  content: "\f236";
}
.md-navigate-next:before {
  content: "\f237";
}
.md-palette:before {
  content: "\f238";
}
.md-panorama:before {
  content: "\f239";
}
.md-panorama-fisheye:before {
  content: "\f23a";
}
.md-panorama-horizontal:before {
  content: "\f23b";
}
.md-panorama-vertical:before {
  content: "\f23c";
}
.md-panorama-wide-angle:before {
  content: "\f23d";
}
.md-photo:before {
  content: "\f23e";
}
.md-photo-album:before {
  content: "\f23f";
}
.md-photo-camera:before {
  content: "\f240";
}
.md-photo-library:before {
  content: "\f241";
}
.md-portrait:before {
  content: "\f242";
}
.md-remove-red-eye:before {
  content: "\f243";
}
.md-rotate-left:before {
  content: "\f244";
}
.md-rotate-right:before {
  content: "\f245";
}
.md-slideshow:before {
  content: "\f246";
}
.md-straighten:before {
  content: "\f247";
}
.md-style:before {
  content: "\f248";
}
.md-switch-camera:before {
  content: "\f249";
}
.md-switch-video:before {
  content: "\f24a";
}
.md-tag-faces:before {
  content: "\f24b";
}
.md-texture:before {
  content: "\f24c";
}
.md-timelapse:before {
  content: "\f24d";
}
.md-timer:before {
  content: "\f24e";
}
.md-timer-3:before {
  content: "\f24f";
}
.md-timer-10:before {
  content: "\f250";
}
.md-timer-auto:before {
  content: "\f251";
}
.md-timer-off:before {
  content: "\f252";
}
.md-tonality:before {
  content: "\f253";
}
.md-transform:before {
  content: "\f254";
}
.md-tune:before {
  content: "\f255";
}
.md-wb-auto:before {
  content: "\f256";
}
.md-wb-cloudy:before {
  content: "\f257";
}
.md-wb-incandescent:before {
  content: "\f258";
}
.md-wb-irradescent:before {
  content: "\f259";
}
.md-wb-sunny:before {
  content: "\f25a";
}
.md-beenhere:before {
  content: "\f25b";
}
.md-directions:before {
  content: "\f25c";
}
.md-directions-bike:before {
  content: "\f25d";
}
.md-directions-bus:before {
  content: "\f25e";
}
.md-directions-car:before {
  content: "\f25f";
}
.md-directions-ferry:before {
  content: "\f260";
}
.md-directions-subway:before {
  content: "\f261";
}
.md-directions-train:before {
  content: "\f262";
}
.md-directions-transit:before {
  content: "\f263";
}
.md-directions-walk:before {
  content: "\f264";
}
.md-flight:before {
  content: "\f265";
}
.md-hotel:before {
  content: "\f266";
}
.md-layers:before {
  content: "\f267";
}
.md-layers-clear:before {
  content: "\f268";
}
.md-local-airport:before {
  content: "\f269";
}
.md-local-atm:before {
  content: "\f26a";
}
.md-local-attraction:before {
  content: "\f26b";
}
.md-local-bar:before {
  content: "\f26c";
}
.md-local-cafe:before {
  content: "\f26d";
}
.md-local-car-wash:before {
  content: "\f26e";
}
.md-local-convenience-store:before {
  content: "\f26f";
}
.md-local-drink:before {
  content: "\f270";
}
.md-local-florist:before {
  content: "\f271";
}
.md-local-gas-station:before {
  content: "\f272";
}
.md-local-grocery-store:before {
  content: "\f273";
}
.md-local-hospital:before {
  content: "\f274";
}
.md-local-hotel:before {
  content: "\f275";
}
.md-local-laundry-service:before {
  content: "\f276";
}
.md-local-library:before {
  content: "\f277";
}
.md-local-mall:before {
  content: "\f278";
}
.md-local-movies:before {
  content: "\f279";
}
.md-local-offer:before {
  content: "\f27a";
}
.md-local-parking:before {
  content: "\f27b";
}
.md-local-pharmacy:before {
  content: "\f27c";
}
.md-local-phone:before {
  content: "\f27d";
}
.md-local-pizza:before {
  content: "\f27e";
}
.md-local-play:before {
  content: "\f27f";
}
.md-local-post-office:before {
  content: "\f280";
}
.md-local-print-shop:before {
  content: "\f281";
}
.md-local-restaurant:before {
  content: "\f282";
}
.md-local-see:before {
  content: "\f283";
}
.md-local-shipping:before {
  content: "\f284";
}
.md-local-taxi:before {
  content: "\f285";
}
.md-location-history:before {
  content: "\f286";
}
.md-map:before {
  content: "\f287";
}
.md-my-location:before {
  content: "\f288";
}
.md-navigation:before {
  content: "\f289";
}
.md-pin-drop:before {
  content: "\f28a";
}
.md-place:before {
  content: "\f28b";
}
.md-rate-review:before {
  content: "\f28c";
}
.md-restaurant-menu:before {
  content: "\f28d";
}
.md-satellite:before {
  content: "\f28e";
}
.md-store-mall-directory:before {
  content: "\f28f";
}
.md-terrain:before {
  content: "\f290";
}
.md-traffic:before {
  content: "\f291";
}
.md-apps:before {
  content: "\f292";
}
.md-cancel:before {
  content: "\f293";
}
.md-arrow-drop-down-circle:before {
  content: "\f294";
}
.md-arrow-drop-down:before {
  content: "\f295";
}
.md-arrow-drop-up:before {
  content: "\f296";
}
.md-arrow-back:before {
  content: "\f297";
}
.md-arrow-forward:before {
  content: "\f298";
}
.md-check:before {
  content: "\f299";
}
.md-close:before {
  content: "\f29a";
}
.md-chevron-left:before {
  content: "\f29b";
}
.md-chevron-right:before {
  content: "\f29c";
}
.md-expand-less:before {
  content: "\f29d";
}
.md-expand-more:before {
  content: "\f29e";
}
.md-fullscreen:before {
  content: "\f29f";
}
.md-fullscreen-exit:before {
  content: "\f2a0";
}
.md-menu:before {
  content: "\f2a1";
}
.md-more-horiz:before {
  content: "\f2a2";
}
.md-more-vert:before {
  content: "\f2a3";
}
.md-refresh:before {
  content: "\f2a4";
}
.md-unfold-less:before {
  content: "\f2a5";
}
.md-unfold-more:before {
  content: "\f2a6";
}
.md-adb:before {
  content: "\f2a7";
}
.md-bluetooth-audio:before {
  content: "\f2a8";
}
.md-disc-full:before {
  content: "\f2a9";
}
.md-dnd-forwardslash:before {
  content: "\f2aa";
}
.md-do-not-disturb:before {
  content: "\f2ab";
}
.md-drive-eta:before {
  content: "\f2ac";
}
.md-event-available:before {
  content: "\f2ad";
}
.md-event-busy:before {
  content: "\f2ae";
}
.md-event-note:before {
  content: "\f2af";
}
.md-folder-special:before {
  content: "\f2b0";
}
.md-mms:before {
  content: "\f2b1";
}
.md-more:before {
  content: "\f2b2";
}
.md-network-locked:before {
  content: "\f2b3";
}
.md-phone-bluetooth-speaker:before {
  content: "\f2b4";
}
.md-phone-forwarded:before {
  content: "\f2b5";
}
.md-phone-in-talk:before {
  content: "\f2b6";
}
.md-phone-locked:before {
  content: "\f2b7";
}
.md-phone-missed:before {
  content: "\f2b8";
}
.md-phone-paused:before {
  content: "\f2b9";
}
.md-play-download:before {
  content: "\f2ba";
}
.md-play-install:before {
  content: "\f2bb";
}
.md-sd-card:before {
  content: "\f2bc";
}
.md-sim-card-alert:before {
  content: "\f2bd";
}
.md-sms:before {
  content: "\f2be";
}
.md-sms-failed:before {
  content: "\f2bf";
}
.md-sync:before {
  content: "\f2c0";
}
.md-sync-disabled:before {
  content: "\f2c1";
}
.md-sync-problem:before {
  content: "\f2c2";
}
.md-system-update:before {
  content: "\f2c3";
}
.md-tap-and-play:before {
  content: "\f2c4";
}
.md-time-to-leave:before {
  content: "\f2c5";
}
.md-vibration:before {
  content: "\f2c6";
}
.md-voice-chat:before {
  content: "\f2c7";
}
.md-vpn-lock:before {
  content: "\f2c8";
}
.md-cake:before {
  content: "\f2c9";
}
.md-domain:before {
  content: "\f2ca";
}
.md-location-city:before {
  content: "\f2cb";
}
.md-mood:before {
  content: "\f2cc";
}
.md-notifications-none:before {
  content: "\f2cd";
}
.md-notifications:before {
  content: "\f2ce";
}
.md-notifications-off:before {
  content: "\f2cf";
}
.md-notifications-on:before {
  content: "\f2d0";
}
.md-notifications-paused:before {
  content: "\f2d1";
}
.md-pages:before {
  content: "\f2d2";
}
.md-party-mode:before {
  content: "\f2d3";
}
.md-group:before {
  content: "\f2d4";
}
.md-group-add:before {
  content: "\f2d5";
}
.md-people:before {
  content: "\f2d6";
}
.md-people-outline:before {
  content: "\f2d7";
}
.md-person:before {
  content: "\f2d8";
}
.md-person-add:before {
  content: "\f2d9";
}
.md-person-outline:before {
  content: "\f2da";
}
.md-plus-one:before {
  content: "\f2db";
}
.md-poll:before {
  content: "\f2dc";
}
.md-public:before {
  content: "\f2dd";
}
.md-school:before {
  content: "\f2de";
}
.md-share:before {
  content: "\f2df";
}
.md-whatshot:before {
  content: "\f2e0";
}
.md-check-box:before {
  content: "\f2e1";
}
.md-check-box-outline-blank:before {
  content: "\f2e2";
}
.md-radio-button-off:before {
  content: "\f2e3";
}
.md-radio-button-on:before {
  content: "\f2e4";
}
.md-star:before {
  content: "\f2e5";
}
.md-star-half:before {
  content: "\f2e6";
}
.md-star-outline:before {
  content: "\f2e7";
}


<template>

    <el-input placeholder="选择资源" size="mini" v-model="inUrl">
      <el-button slot="append" icon="el-icon-upload" @click="selectImage">选择</el-button>
      <el-button size="mini" slot="append" icon="el-icon-picture" @click="cropper">裁剪</el-button>
    </el-input>

</template>


ucloud

attribute `resource_type` is deprecated for optimizing parameters

attribute `charge_type` is deprecated for optimizing parameters

attribute `expire_time` is deprecated for optimizing outputs


package apoc.nlp.azure

import apoc.result.NodeWithMapResult
import apoc.util.JsonUtil
import org.neo4j.graphdb.Node
import org.neo4j.logging.Log
import java.io.DataOutputStream
import java.net.URL
import javax.net.ssl.HttpsURLConnection

enum class AzureEndpoint(val method: String) {
    SENTIMENT("/text/analytics/v2.1/sentiment"),
    KEY_PHRASES("/text/analytics/v2.1/keyPhrases"),
    VISION("/vision/v2.1/analyze"),
    ENTITIES("/text/analytics/v2.1/entities")
}

class RealAzureClient(private val baseUrl: String, private val key: String, private val log: Log, val config: Map<String, Any>) : AzureClient {

    private val nodeProperty = config.getOrDefault("nodeProperty", "text").toString()

    companion object {
        fun responseToNodeWithMapResult(resp: Map<String, Any>, source: List<Node>): NodeWithMapResult {
            val nodeId = resp.getValue("id").toString().toLong()
            val node = source.find { it.id == nodeId }
            return NodeWithMapResult(node, resp, emptyMap())
        }
    }

    private fun postData(method: String, subscriptionKeyValue: String, data: List<Map<String, Any>>, config: Map<String, Any> = emptyMap()): List<Map<String, Any>> {
        val fullUrl = baseUrl + method + config.map { "${it.key}=${it.value}" }
                .joinToString("&")
                .also { if (it.isNullOrBlank()) it else "?$it" }
        val url = URL(fullUrl)
        return postData(url, subscriptionKeyValue, data)
    }

    private fun postData(url: URL, subscriptionKeyValue: String, data: List<Map<String, Any>>): List<Map<String, Any>> {
        val connection = url.openConnection() as HttpsURLConnection
        connection.requestMethod = "POST"
        connection.setRequestProperty("Ocp-Apim-Subscription-Key", subscriptionKeyValue)
        connection.doOutput = true

        connection.setRequestProperty("Content-Type", "text/json")
        DataOutputStream(connection.outputStream).use { it.write(JsonUtil.writeValueAsBytes(mapOf("documents" to convertInput(data)))) }

        return connection.inputStream
                .use { JsonUtil.OBJECT_MAPPER.readValue(it, Any::class.java) }
                .let { result ->
                    val documents = (result as Map<String, Any?>)["documents"] as List<Map<String, Any?>>
                    documents.map { it as Map<String, Any> }
                }
    }

    private fun convertInput(data: Any): List<Map<String, Any>> {
        return when (data) {
            is Map<*, *> -> listOf(data as Map<String, Any>)
            is Collection<*> -> data.filterNotNull().map { convertInput(it) }.flatten()
            is String -> convertInput(mapOf("id" to 1, "text" to data))
            else -> throw java.lang.RuntimeException("Class ${data::class.java.name} not supported")
        }
    }

    override fun entities(nodes: List<Node>, batchId: Int): List<Map<String, Any>> {
        val data = nodes.map { node -> mapOf("id" to node.id, "text" to node.getProperty(nodeProperty)) }
        return postData(AzureEndpoint.ENTITIES.method, key, data)
    }

    override fun sentiment(nodes: List<Node>, batchId: Int): List<Map<String, Any>>  {
        val data = nodes.map { node -> mapOf("id" to node.id, "text" to node.getProperty(nodeProperty)) }
        val result = postData(AzureEndpoint.SENTIMENT.method, key, data)
        return result
    }

    override fun keyPhrases(nodes: List<Node>, batchId: Int): List<Map<String, Any>> {
        val data = nodes.map { node -> mapOf("id" to node.id, "text" to node.getProperty(nodeProperty)) }
        val result = postData(AzureEndpoint.KEY_PHRASES.method, key, data)
        return result
    }

}


use Autoprefixer instead. <3


["0.1.0"]
git-tree-sha1 = "11ce42726a34fc11546048138f4c00113cda9ba2"

["0.1.1"]
git-tree-sha1 = "1c849eedd5e79cf4c8a9260e634c092fdcc030e1"

["0.2.0"]
git-tree-sha1 = "3c613b70dd38a91352ff9143f68503d475137026"

["0.3.0"]
git-tree-sha1 = "9a6969f409bfec28afc19d2eafffdb240e7ae1b1"


<component name="libraryTable">
  <library name="Maven: commons-dbcp:commons-dbcp:1.4">
    <CLASSES>
      <root url="jar://D:/wulinhao/software/maven_repo/commons-dbcp/commons-dbcp/1.4/commons-dbcp-1.4.jar!/" />
    </CLASSES>
    <JAVADOC>
      <root url="jar://D:/wulinhao/software/maven_repo/commons-dbcp/commons-dbcp/1.4/commons-dbcp-1.4-javadoc.jar!/" />
    </JAVADOC>
    <SOURCES>
      <root url="jar://D:/wulinhao/software/maven_repo/commons-dbcp/commons-dbcp/1.4/commons-dbcp-1.4-sources.jar!/" />
    </SOURCES>
  </library>
</component>


/***
 * Copyright (c) 2009 Caelum - www.caelum.com.br/opensource
 * All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * 	http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package br.com.caelum.vraptor.http.route;

import javax.enterprise.inject.Vetoed;

import br.com.caelum.vraptor.VRaptorException;

/**
 * A route was not found for the specified parameters.
 *
 * @author guilherme silveira
 */
@Vetoed
public class RouteNotFoundException extends VRaptorException {

	private static final long serialVersionUID = 606801838930057251L;

	public RouteNotFoundException(String msg) {
		super(msg);
	}

}


/*
 * Copyright (C) 2007 Google, Inc.
 * Copyright (C) 2011 Intel, Inc.
 * Copyright (C) 2013 Intel, Inc.
 *
 * This software is licensed under the terms of the GNU General Public
 * License version 2, as published by the Free Software Foundation, and
 * may be copied, distributed, and modified under those terms.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 */

#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/platform_device.h>
#include <linux/slab.h>
#include <linux/io.h>
#include <linux/goldfish.h>

#define PDEV_BUS_OP_DONE        (0x00)
#define PDEV_BUS_OP_REMOVE_DEV  (0x04)
#define PDEV_BUS_OP_ADD_DEV     (0x08)

#define PDEV_BUS_OP_INIT        (0x00)

#define PDEV_BUS_OP             (0x00)
#define PDEV_BUS_GET_NAME       (0x04)
#define PDEV_BUS_NAME_LEN       (0x08)
#define PDEV_BUS_ID             (0x0c)
#define PDEV_BUS_IO_BASE        (0x10)
#define PDEV_BUS_IO_SIZE        (0x14)
#define PDEV_BUS_IRQ            (0x18)
#define PDEV_BUS_IRQ_COUNT      (0x1c)
#define PDEV_BUS_GET_NAME_HIGH  (0x20)

struct pdev_bus_dev {
	struct list_head list;
	struct platform_device pdev;
	struct resource resources[0];
};

static void goldfish_pdev_worker(struct work_struct *work);

static void __iomem *pdev_bus_base;
static unsigned long pdev_bus_addr;
static unsigned long pdev_bus_len;
static u32 pdev_bus_irq;
static LIST_HEAD(pdev_bus_new_devices);
static LIST_HEAD(pdev_bus_registered_devices);
static LIST_HEAD(pdev_bus_removed_devices);
static DECLARE_WORK(pdev_bus_worker, goldfish_pdev_worker);

static void goldfish_pdev_worker(struct work_struct *work)
{
	int ret;
	struct pdev_bus_dev *pos, *n;

	list_for_each_entry_safe(pos, n, &pdev_bus_removed_devices, list) {
		list_del(&pos->list);
		platform_device_unregister(&pos->pdev);
		kfree(pos);
	}
	list_for_each_entry_safe(pos, n, &pdev_bus_new_devices, list) {
		list_del(&pos->list);
		ret = platform_device_register(&pos->pdev);
		if (ret)
			pr_err("goldfish_pdev_worker failed to register device, %s\n",
								pos->pdev.name);
		list_add_tail(&pos->list, &pdev_bus_registered_devices);
	}
}

static void goldfish_pdev_remove(void)
{
	struct pdev_bus_dev *pos, *n;
	u32 base;

	base = readl(pdev_bus_base + PDEV_BUS_IO_BASE);

	list_for_each_entry_safe(pos, n, &pdev_bus_new_devices, list) {
		if (pos->resources[0].start == base) {
			list_del(&pos->list);
			kfree(pos);
			return;
		}
	}
	list_for_each_entry_safe(pos, n, &pdev_bus_registered_devices, list) {
		if (pos->resources[0].start == base) {
			list_del(&pos->list);
			list_add_tail(&pos->list, &pdev_bus_removed_devices);
			schedule_work(&pdev_bus_worker);
			return;
		}
	};
	pr_err("goldfish_pdev_remove could not find device at %x\n", base);
}

static int goldfish_new_pdev(void)
{
	struct pdev_bus_dev *dev;
	u32 name_len;
	u32 irq = -1, irq_count;
	int resource_count = 2;
	u32 base;
	char *name;

	base = readl(pdev_bus_base + PDEV_BUS_IO_BASE);

	irq_count = readl(pdev_bus_base + PDEV_BUS_IRQ_COUNT);
	name_len = readl(pdev_bus_base + PDEV_BUS_NAME_LEN);
	if (irq_count)
		resource_count++;

	dev = kzalloc(sizeof(*dev) +
		sizeof(struct resource) * resource_count +
		name_len + 1 + sizeof(*dev->pdev.dev.dma_mask), GFP_ATOMIC);
	if (dev == NULL)
		return -ENOMEM;

	dev->pdev.num_resources = resource_count;
	dev->pdev.resource = (struct resource *)(dev + 1);
	dev->pdev.name = name = (char *)(dev->pdev.resource + resource_count);
	dev->pdev.dev.coherent_dma_mask = ~0;
	dev->pdev.dev.dma_mask = (void *)(dev->pdev.name + name_len + 1);
	*dev->pdev.dev.dma_mask = ~0;

	gf_write_ptr(name, pdev_bus_base + PDEV_BUS_GET_NAME,
		pdev_bus_base + PDEV_BUS_GET_NAME_HIGH);

	name[name_len] = '\0';
	dev->pdev.id = readl(pdev_bus_base + PDEV_BUS_ID);
	dev->pdev.resource[0].start = base;
	dev->pdev.resource[0].end = base +
				readl(pdev_bus_base + PDEV_BUS_IO_SIZE) - 1;
	dev->pdev.resource[0].flags = IORESOURCE_MEM;
	if (irq_count) {
		irq = readl(pdev_bus_base + PDEV_BUS_IRQ);
		dev->pdev.resource[1].start = irq;
		dev->pdev.resource[1].end = irq + irq_count - 1;
		dev->pdev.resource[1].flags = IORESOURCE_IRQ;
	}

	pr_debug("goldfish_new_pdev %s at %x irq %d\n", name, base, irq);
	list_add_tail(&dev->list, &pdev_bus_new_devices);
	schedule_work(&pdev_bus_worker);

	return 0;
}

static irqreturn_t goldfish_pdev_bus_interrupt(int irq, void *dev_id)
{
	irqreturn_t ret = IRQ_NONE;

	while (1) {
		u32 op = readl(pdev_bus_base + PDEV_BUS_OP);

		switch (op) {
		case PDEV_BUS_OP_REMOVE_DEV:
			goldfish_pdev_remove();
			ret = IRQ_HANDLED;
			break;

		case PDEV_BUS_OP_ADD_DEV:
			goldfish_new_pdev();
			ret = IRQ_HANDLED;
			break;

		case PDEV_BUS_OP_DONE:
		default:
			return ret;
		}
	}
}

static int goldfish_pdev_bus_probe(struct platform_device *pdev)
{
	int ret;
	struct resource *r;

	r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	if (r == NULL)
		return -EINVAL;

	pdev_bus_addr = r->start;
	pdev_bus_len = resource_size(r);

	pdev_bus_base = ioremap(pdev_bus_addr, pdev_bus_len);
	if (pdev_bus_base == NULL) {
		ret = -ENOMEM;
		dev_err(&pdev->dev, "unable to map Goldfish MMIO.\n");
		goto free_resources;
	}

	r = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
	if (r == NULL) {
		ret = -ENOENT;
		goto free_map;
	}

	pdev_bus_irq = r->start;

	ret = request_irq(pdev_bus_irq, goldfish_pdev_bus_interrupt,
				IRQF_SHARED, "goldfish_pdev_bus", pdev);
	if (ret) {
		dev_err(&pdev->dev, "unable to request Goldfish IRQ\n");
		goto free_map;
	}

	writel(PDEV_BUS_OP_INIT, pdev_bus_base + PDEV_BUS_OP);
	return 0;

free_map:
	iounmap(pdev_bus_base);
free_resources:
	release_mem_region(pdev_bus_addr, pdev_bus_len);
	return ret;
}

static struct platform_driver goldfish_pdev_bus_driver = {
	.probe = goldfish_pdev_bus_probe,
	.driver = {
		.name = "goldfish_pdev_bus"
	}
};
builtin_platform_driver(goldfish_pdev_bus_driver);


/**
 *
 */
package com.hangum.tadpole.rdb.core.viewers.object.sub.rdb.table;

import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.widgets.Composite;

/**
 * @author nilriri
 *
 */
public class CommentCellEditor extends TextCellEditor {
	private TableViewer viewer = null;
	private int column = -1;

	/**
	 *
	 */
	public CommentCellEditor() {
	}

	/**
	 * @param parent
	 */
	public CommentCellEditor(Composite parent) {
		super(parent);
	}

	/**
	 * @param parent
	 */
	public CommentCellEditor(int column, TableViewer viewer) {
		super(viewer.getTable());
		this.viewer = viewer;
		this.column = column;
	}

	/**
	 * @param parent
	 * @param style
	 */
	public CommentCellEditor(Composite parent, int style) {
		super(parent, style);
	}

	@Override
    protected void keyReleaseOccured(KeyEvent keyEvent) {
		super.keyReleaseOccured(keyEvent);

		if (keyEvent.keyCode == SWT.ARROW_UP) {
			if (-1 < viewer.getTable().getSelectionIndex()){
				Object element = viewer.getElementAt(viewer.getTable().getSelectionIndex() - 1);
				if (element != null){
					viewer.editElement(element, column);
				} else {
					element = viewer.getElementAt(viewer.getTable().getItemCount() - 1);
					viewer.editElement(element, column);
				}
			}
		}else if (keyEvent.keyCode == SWT.ARROW_DOWN) {
			if (viewer.getTable().getItemCount() > viewer.getTable().getSelectionIndex()){
				Object element = viewer.getElementAt(viewer.getTable().getSelectionIndex() + 1);
				if (element != null){
					viewer.editElement(element, column);
				} else {
					element = viewer.getElementAt(0);
					viewer.editElement(element, column);
				}
			}
		}else if (keyEvent.keyCode == SWT.ARROW_LEFT) {
			if (column > 0) {
				Object element = viewer.getElementAt(viewer.getTable().getSelectionIndex());
				viewer.editElement(element, column - 1);
				// 이동하려는 컬럼이 수정불가능한 cell일 경우 이동하지 않는다.
				// TODO : viewer에서 column 인덱스를 이용해 수정가능한 컬럼인지 확인하는 방법이 있으면....
				// EditingSupport의 canEdit()정보를 이용할 수 없나??
				if(!viewer.isCellEditorActive()) viewer.editElement(element, column);
			}
		} else if (keyEvent.keyCode == SWT.ARROW_RIGHT) {
			if (column < viewer.getTable().getColumnCount() - 1){
				Object element = viewer.getElementAt(viewer.getTable().getSelectionIndex());
				viewer.editElement(element, column + 1);
				// 이동하려는 컬럼이 수정불가능한 cell일 경우 이동하지 않는다.
				// TODO : viewer에서 column 인덱스를 이용해 수정가능한 컬럼인지 확인하는 방법이 있으면....
				// EditingSupport의 canEdit()정보를 이용할 수 없나??
				if(!viewer.isCellEditorActive()) viewer.editElement(element, column);
			}
		}
	}

}


# libvorbisfile pkg-config source file

prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@

Name: vorbisfile
Description: vorbisfile is a library that provides a convenient high-level API for decoding and basic manipulation of all Vorbis I audio streams
Version: @VERSION@
Requires.private: vorbis
Conflicts:
Libs: -L${libdir} -lvorbisfile
Cflags: -I${includedir}


/* Copyright (c) 2017, Google Inc.
 *
 * Permission to use, copy, modify, and/or distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */

// cavp_aes_gcm_test processes a NIST CAVP AES GCM test vector request file and
// emits the corresponding response.

#include <stdlib.h>

#include <openssl/aead.h>
#include <openssl/cipher.h>
#include <openssl/crypto.h>
#include <openssl/err.h>

#include "../crypto/test/file_test.h"
#include "../crypto/test/test_util.h"
#include "cavp_test_util.h"

namespace {

struct TestCtx {
  const EVP_AEAD *aead;
};

}

static const EVP_AEAD *GetAEAD(const std::string &name, const bool enc) {
  if (name == "aes-128-gcm") {
    return EVP_aead_aes_128_gcm();
  } else if (name == "aes-192-gcm") {
    return EVP_aead_aes_192_gcm();
  } else if (name == "aes-256-gcm") {
    return EVP_aead_aes_256_gcm();
  }
  return nullptr;
}

static bool TestAEADEncrypt(FileTest *t, void *arg) {
  TestCtx *ctx = reinterpret_cast<TestCtx *>(arg);

  std::string key_len_str, iv_len_str, pt_len_str, aad_len_str, tag_len_str;
  if (!t->GetInstruction(&key_len_str, "Keylen") ||
      !t->GetInstruction(&iv_len_str, "IVlen") ||
      !t->GetInstruction(&pt_len_str, "PTlen") ||
      !t->GetInstruction(&aad_len_str, "AADlen") ||
      !t->GetInstruction(&tag_len_str, "Taglen")) {
    return false;
  }

  std::string count;
  std::vector<uint8_t> key, iv, pt, aad, tag, ct;
  if (!t->GetAttribute(&count, "Count") ||
      !t->GetBytes(&key, "Key") ||
      !t->GetBytes(&iv, "IV") ||
      !t->GetBytes(&pt, "PT") ||
      !t->GetBytes(&aad, "AAD") ||
      key.size() * 8 != strtoul(key_len_str.c_str(), nullptr, 0) ||
      iv.size() * 8 != strtoul(iv_len_str.c_str(), nullptr, 0) ||
      pt.size() * 8 != strtoul(pt_len_str.c_str(), nullptr, 0) ||
      aad.size() * 8 != strtoul(aad_len_str.c_str(), nullptr, 0) ||
      iv.size() != 12) {
    return false;
  }

  const size_t tag_len = strtoul(tag_len_str.c_str(), nullptr, 0) / 8;
  if (!AEADEncrypt(ctx->aead, &ct, &tag, tag_len, key, pt, aad, iv)) {
    return false;
  }
  printf("%s", t->CurrentTestToString().c_str());
  printf("CT = %s\r\n", EncodeHex(ct).c_str());
  printf("Tag = %s\r\n\r\n", EncodeHex(tag).c_str());

  return true;
}

static bool TestAEADDecrypt(FileTest *t, void *arg) {
  TestCtx *ctx = reinterpret_cast<TestCtx *>(arg);

  std::string key_len, iv_len, pt_len_str, aad_len_str, tag_len;
  if (!t->GetInstruction(&key_len, "Keylen") ||
      !t->GetInstruction(&iv_len, "IVlen") ||
      !t->GetInstruction(&pt_len_str, "PTlen") ||
      !t->GetInstruction(&aad_len_str, "AADlen") ||
      !t->GetInstruction(&tag_len, "Taglen")) {
    t->PrintLine("Invalid instruction block.");
    return false;
  }
  size_t aad_len = strtoul(aad_len_str.c_str(), nullptr, 0) / 8;
  size_t pt_len = strtoul(pt_len_str.c_str(), nullptr, 0) / 8;

  std::string count;
  std::vector<uint8_t> key, iv, ct, aad, tag, pt;
  if (!t->GetAttribute(&count, "Count") ||
      !t->GetBytes(&key, "Key") ||
      !t->GetBytes(&aad, "AAD") ||
      !t->GetBytes(&tag, "Tag") ||
      !t->GetBytes(&iv, "IV") ||
      !t->GetBytes(&ct, "CT") ||
      key.size() * 8 != strtoul(key_len.c_str(), nullptr, 0) ||
      iv.size() * 8 != strtoul(iv_len.c_str(), nullptr, 0) ||
      ct.size() != pt_len ||
      aad.size() != aad_len ||
      tag.size() * 8 != strtoul(tag_len.c_str(), nullptr, 0)) {
    t->PrintLine("Invalid test case");
    return false;
  }

  printf("%s", t->CurrentTestToString().c_str());
  bool aead_result =
      AEADDecrypt(ctx->aead, &pt, pt_len, key, aad, ct, tag, iv);
  if (aead_result) {
    printf("PT = %s\r\n\r\n", EncodeHex(pt).c_str());
  } else {
    printf("FAIL\r\n\r\n");
  }

  return true;
}

static int usage(char *arg) {
  fprintf(stderr, "usage: %s (enc|dec) <cipher> <test file>\n", arg);
  return 1;
}

int cavp_aes_gcm_test_main(int argc, char **argv) {
  if (argc != 4) {
    return usage(argv[0]);
  }

  const std::string mode(argv[1]);
  bool (*test_fn)(FileTest * t, void *arg);
  if (mode == "enc") {
    test_fn = &TestAEADEncrypt;
  } else if (mode == "dec") {
    test_fn = &TestAEADDecrypt;
  } else {
    return usage(argv[0]);
  }

  const EVP_AEAD *aead = GetAEAD(argv[2], mode == "enc");
  if (aead == nullptr) {
    fprintf(stderr, "invalid aead: %s\n", argv[2]);
    return 1;
  }

  TestCtx ctx = {aead};

  FileTest::Options opts;
  opts.path = argv[3];
  opts.callback = test_fn;
  opts.arg = &ctx;
  opts.silent = true;
  opts.comment_callback = EchoComment;
  return FileTestMain(opts);
}


package content_test

import (
	"testing"

	"github.com/urandom/readeef/content"
)

func TestThumbnail_Validate(t *testing.T) {
	tests := []struct {
		name      string
		ArticleID content.ArticleID
		wantErr   bool
	}{
		{"valid", 1, false},
		{"invalid", 0, true},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			thumb := content.Thumbnail{
				ArticleID: tt.ArticleID,
			}
			if err := thumb.Validate(); (err != nil) != tt.wantErr {
				t.Errorf("Thumbnail.Validate() error = %v, wantErr %v", err, tt.wantErr)
			}
		})
	}
}


#!/bin/bash
# User setup script.
# (C) Mark Blakeney, Aug 2016.

PROG="$(basename $0)"
NAME=${PROG%-*}

BINDIR="/usr/bin"
APPDIR="/usr/share/applications"
ICOBAS="/usr/share/icons/hicolor"
ICODIR="$ICOBAS/128x128/apps"
OCODIR="/usr/share/pixmaps"
DOCDIR="/usr/share/doc/$NAME"
CNFDIR="/etc"
HCFDIR="${XDG_CONFIG_HOME:-$HOME/.config}"
AUTDIR="$HCFDIR/autostart"

usage() {
    echo "Usage:"
    echo "As root: sudo $PROG install|uninstall"
    echo "As user: $PROG start|stop|restart|autostart|autostop|status"
    echo
    echo "-d <dir> (option sets DESTDIR for install/uninstall)"
    echo "-r (force allow root to perform user commands. PLEASE AVOID USING THIS!)"
    exit 1
}

# Process command line options
DESTDIR=""
FORCEROOT=0
while getopts d:r c; do
    case $c in
    d) DESTDIR="$OPTARG";;
    r) FORCEROOT=1;;
    \?) usage;;
    esac
done

shift $((OPTIND - 1))

if [[ $# -ne 1 ]]; then
    usage
fi

cmd="$1"

# Launch given desktop app. First work out most suitable launcher.
# Pretty crude at present but should work for at least GNOME and KDE.
launch() {
    local app="$1"
    local fullpath="$APPDIR/$app.desktop"
    local binpath="$APPBIN/$app"

    # All the commands we will potentially try ..
    local cmds=(
	"kde kioclient5 exec $fullpath"
	"kde kioclient exec $fullpath"
	"all gtk-launch $app"
	"all i3-msg exec $binpath"
	"all exo-open $fullpath"
	"all dex $fullpath"
    )

    local cmdline
    for cmdline in "${cmds[@]}" ; do
	IFS=' ' read de cmd args <<< "$cmdline"

        # Skip if the command does not exist
	if ! hash $cmd &>/dev/null; then
	    continue
	fi

	# Only try KDE commands on KDE
	if ! echo $XDG_CURRENT_DESKTOP | grep -q KDE; then
	    if [[ $de == kde ]]; then
		continue
	    fi
	fi

	# Execute this command
	$cmd $args &>/dev/null
	return $?
    done

    echo "Don't know how to invoke $app.desktop" >&2
    return 1
}

# Set up desktop entry link for auto start of app, if it doesn't already
# exist
auto_start() {
    if [[ ! -f $APPDIR/$NAME.desktop ]]; then
	if [[ -e $AUTDIR/$NAME.desktop ]]; then
	    echo "Removed old $AUTDIR/$NAME.desktop"
	    rm -f $AUTDIR/$NAME.desktop
	fi
	return 1
    fi

    if ! cmp -s $APPDIR/$NAME.desktop $AUTDIR/$NAME.desktop; then
	if mkdir -p $AUTDIR && cp $APPDIR/$NAME.desktop $AUTDIR; then
	    echo "installed or updated $AUTDIR/$NAME.desktop"
	fi
    fi
    return 0
}

# Action given user command
user_action() {
    local cmd=$1

    if [[ $cmd == start ]]; then
	if [[ ! -f $APPDIR/$NAME.desktop ]]; then
	    echo "$NAME is not installed."
	    exit 1
	fi
	if launch "$NAME"; then
	    echo "$NAME started."
	fi
    elif [[ $cmd == stop ]]; then
	for prog in libinput-debug-events $NAME; do
	    if pkill -u $USER -f "$prog\$|$prog " &>/dev/null; then
		echo "$prog stopped."
	    fi
	done
    elif [[ $cmd == autostart ]]; then
	if ! auto_start; then
	    echo "$NAME is not installed."
	    exit 1
	fi
    elif [[ $cmd == autostop ]]; then
	rm -fv $AUTDIR/$NAME.desktop
    elif [[ $cmd == status ]]; then
	if [[ -f $APPDIR/$NAME.desktop ]]; then
	    echo "$NAME is installed."
	else
	    echo "$NAME is not installed."
	fi
	if [[ -f $AUTDIR/$NAME.desktop ]]; then
	    echo "$NAME is set to autostart."
	else
	    echo "$NAME is not set to autostart."
	fi
	if pgrep -u $USER -f "$NAME\$|$NAME " &>/dev/null; then
	    echo "$NAME is running."
	else
	    echo "$NAME is not running."
	fi
	if [[ -f $HCFDIR/$NAME.conf ]]; then
	    echo "$NAME is using custom configuration."
	else
	    echo "$NAME is using default configuration."
	fi
    else
	usage
    fi
}

if [[ $cmd == install || $cmd == uninstall ]]; then
    DESTDIR="${DESTDIR%%+(/)}"
    if [[ -z $DESTDIR && $(id -un) != root ]]; then
	echo "Install or uninstall must be run as sudo/root."
	exit 1
    fi

    # Remove any old files from earlier versions of program
    rm -f $DESTDIR$OCODIR/$NAME.png
    rm -f $DESTDIR$ICODIR/$NAME.png

    if [[ $cmd == install ]]; then
	install -CDv -m 755 -t $DESTDIR$BINDIR $NAME-setup
	install -CDv -m 755 -t $DESTDIR$BINDIR $NAME
	install -CDv -m 644 -t $DESTDIR$APPDIR $NAME.desktop
	install -CDv -m 644 -t $DESTDIR$ICODIR $NAME.svg
	install -CDv -m 644 -t $DESTDIR$CNFDIR $NAME.conf
	install -CDv -m 644 -t $DESTDIR$DOCDIR README.md
    else
	rm -rfv $DESTDIR$BINDIR/$NAME
	rm -rfv $DESTDIR$APPDIR/$NAME.desktop
	rm -rfv $DESTDIR$ICODIR/$NAME.svg
	rm -rfv $DESTDIR$CNFDIR/$NAME.conf
	rm -rfv $DESTDIR$DOCDIR
	rm -rfv $DESTDIR$BINDIR/$NAME-setup
    fi

    if [[ -z $DESTDIR ]]; then
	if [[ -x /usr/bin/update-desktop-database ]]; then
	    /usr/bin/update-desktop-database -q
	fi
	if [[ -x /usr/bin/gtk-update-icon-cache ]]; then
	    /usr/bin/gtk-update-icon-cache $ICOBAS
	fi
    fi
else
    if [[ $(id -un) == root && $FORCEROOT == 0 ]]; then
	echo "Non-installation commands must be run as your own user."
	exit 1
    fi

    # Remove any old configuration from earlier versions of program
    rm -fv ~/bin/$NAME 2>/dev/null
    rm -fv ~/.local/bin/$NAME 2>/dev/null
    rm -fv ~/.local/share/applications/$NAME.desktop 2>/dev/null
    rm -fv ~/.local/share/icons/$NAME.png 2>/dev/null

    # Look for and update any autostart file if it is a link or not
    # pointing to the latest desktop entry. Apparently user autostart
    # files should not be symlinks to system dir files.
    if [[ -e $AUTDIR/$NAME.desktop ]]; then
	if [[ -L $AUTDIR/$NAME.desktop ]]; then
	    echo "Removed old $AUTDIR/$NAME.desktop link"
	    rm -f $AUTDIR/$NAME.desktop
	fi
	auto_start
    fi

    if [[ $cmd == restart ]]; then
	user_action "stop"
	user_action "start"
    else
	user_action $cmd
    fi
fi

exit 0


// Copyright David Abrahams 2003. Use, modification and distribution is
// subject to the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#ifndef ANY_CONVERSION_EATER_DWA20031117_HPP
# define ANY_CONVERSION_EATER_DWA20031117_HPP

namespace boost {
namespace iterators {
namespace detail {

// This type can be used in traits to "eat" up the one user-defined
// implicit conversion allowed.
struct any_conversion_eater
{
    template <class T>
    any_conversion_eater(T const&);
};

}}} // namespace boost::iterators::detail

#endif // ANY_CONVERSION_EATER_DWA20031117_HPP


/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "src/trace_processor/importers/ftrace/sched_event_tracker.h"

#include "perfetto/base/logging.h"
#include "src/trace_processor/importers/common/args_tracker.h"
#include "src/trace_processor/importers/common/event_tracker.h"
#include "src/trace_processor/importers/common/process_tracker.h"
#include "test/gtest_and_gmock.h"

namespace perfetto {
namespace trace_processor {
namespace {

using ::testing::_;
using ::testing::InSequence;
using ::testing::Invoke;

class SchedEventTrackerTest : public ::testing::Test {
 public:
  SchedEventTrackerTest() {
    context.storage.reset(new TraceStorage());
    context.global_args_tracker.reset(new GlobalArgsTracker(&context));
    context.args_tracker.reset(new ArgsTracker(&context));
    context.event_tracker.reset(new EventTracker(&context));
    context.process_tracker.reset(new ProcessTracker(&context));
    sched_tracker = SchedEventTracker::GetOrCreate(&context);
  }

 protected:
  TraceProcessorContext context;
  SchedEventTracker* sched_tracker;
};

TEST_F(SchedEventTrackerTest, InsertSecondSched) {
  uint32_t cpu = 3;
  int64_t timestamp = 100;
  uint32_t pid_1 = 2;
  int64_t prev_state = 32;
  static const char kCommProc1[] = "process1";
  static const char kCommProc2[] = "process2";
  uint32_t pid_2 = 4;
  int32_t prio = 1024;

  sched_tracker->PushSchedSwitch(cpu, timestamp, pid_1, kCommProc2, prio,
                                 prev_state, pid_2, kCommProc1, prio);
  ASSERT_EQ(context.storage->sched_slice_table().row_count(), 1ul);

  sched_tracker->PushSchedSwitch(cpu, timestamp + 1, pid_2, kCommProc1, prio,
                                 prev_state, pid_1, kCommProc2, prio);

  ASSERT_EQ(context.storage->sched_slice_table().row_count(), 2ul);

  const auto& timestamps = context.storage->sched_slice_table().ts();
  ASSERT_EQ(timestamps[0], timestamp);
  ASSERT_EQ(context.storage->thread_table().start_ts()[1], base::nullopt);

  auto name =
      context.storage->GetString(context.storage->thread_table().name()[1]);
  ASSERT_STREQ(name.c_str(), kCommProc1);
  ASSERT_EQ(context.storage->sched_slice_table().utid()[0], 1u);
  ASSERT_EQ(context.storage->sched_slice_table().dur()[0], 1);
}

TEST_F(SchedEventTrackerTest, InsertThirdSched_SameThread) {
  uint32_t cpu = 3;
  int64_t timestamp = 100;
  int64_t prev_state = 32;
  static const char kCommProc1[] = "process1";
  static const char kCommProc2[] = "process2";
  int32_t prio = 1024;

  sched_tracker->PushSchedSwitch(cpu, timestamp, /*tid=*/4, kCommProc2, prio,
                                 prev_state,
                                 /*tid=*/2, kCommProc1, prio);
  ASSERT_EQ(context.storage->sched_slice_table().row_count(), 1u);

  sched_tracker->PushSchedSwitch(cpu, timestamp + 1, /*tid=*/2, kCommProc1,
                                 prio, prev_state,
                                 /*tid=*/4, kCommProc2, prio);
  sched_tracker->PushSchedSwitch(cpu, timestamp + 11, /*tid=*/4, kCommProc2,
                                 prio, prev_state,
                                 /*tid=*/2, kCommProc1, prio);
  sched_tracker->PushSchedSwitch(cpu, timestamp + 31, /*tid=*/2, kCommProc1,
                                 prio, prev_state,
                                 /*tid=*/4, kCommProc2, prio);
  ASSERT_EQ(context.storage->sched_slice_table().row_count(), 4ul);

  const auto& timestamps = context.storage->sched_slice_table().ts();
  ASSERT_EQ(timestamps[0], timestamp);
  ASSERT_EQ(context.storage->thread_table().start_ts()[1], base::nullopt);
  ASSERT_EQ(context.storage->sched_slice_table().dur()[0], 1u);
  ASSERT_EQ(context.storage->sched_slice_table().dur()[1], 11u - 1u);
  ASSERT_EQ(context.storage->sched_slice_table().dur()[2], 31u - 11u);
  ASSERT_EQ(context.storage->sched_slice_table().utid()[0],
            context.storage->sched_slice_table().utid()[2]);
}

TEST_F(SchedEventTrackerTest, UpdateThreadMatch) {
  uint32_t cpu = 3;
  int64_t timestamp = 100;
  int64_t prev_state = 32;
  static const char kCommProc1[] = "process1";
  static const char kCommProc2[] = "process2";
  int32_t prio = 1024;

  sched_tracker->PushSchedSwitch(cpu, timestamp, /*tid=*/1, kCommProc2, prio,
                                 prev_state,
                                 /*tid=*/4, kCommProc1, prio);
  sched_tracker->PushSchedSwitch(cpu, timestamp + 1, /*tid=*/4, kCommProc1,
                                 prio, prev_state,
                                 /*tid=*/1, kCommProc2, prio);

  context.process_tracker->SetProcessMetadata(2, base::nullopt, "test",
                                              base::StringView());
  context.process_tracker->UpdateThread(4, 2);

  ASSERT_EQ(context.storage->thread_table().tid()[1], 4u);
  ASSERT_EQ(context.storage->thread_table().upid()[1].value(), 1u);
  ASSERT_EQ(context.storage->process_table().pid()[1], 2u);
  ASSERT_EQ(context.storage->process_table().start_ts()[1], base::nullopt);
}

}  // namespace
}  // namespace trace_processor
}  // namespace perfetto


import urllib
import sys
import re

place = sys.argv[1]
appID = 'WHARE2-WAGAJRG3AV'
API_URL = ('http://api.wolframalpha.com/v2/query?input=time%20in%20'
           + place + '&appid=' + appID)
plaintext_tag = '<plaintext>'
plaintext_close_tag = '</plaintext>'

plaintext_lines = []
for line in urllib.urlopen(API_URL).readlines():
    line = line.strip()
    if line[:len(plaintext_tag)] == plaintext_tag:
            plaintext_lines.append(line)

try:
    time_and_date = re.match(plaintext_tag + '(.+)' +
                         plaintext_close_tag, plaintext_lines[1])
    pattern = re.match('(.+)\s+\|\s+(.+)', time_and_date.groups()[0])
except:
    print 'Cannot find time in', place

time = pattern.groups()[0][:-1]
date = pattern.groups()[1]

print 'In', place, 'it is', time, 'on', date


/* eslint-disable default-case */
import bound01 from './bound01';
import { decomposeColor } from '.';

export default function rgbToHsv(color) {
    const { type, values } = decomposeColor(color);
    if (!type || !values || type.indexOf('rgb') === -1) {
        return '';
    }

    const r = bound01(values[0], 255);
    const g = bound01(values[1], 255);
    const b = bound01(values[2], 255);

    const max = Math.max(r, g, b);
    const min = Math.min(r, g, b);
    const v = max;
    const d = max - min;
    const s = max === 0 ? 0 : d / max;

    let h;
    if (max === min) {
        h = 0; // achromatic
    } else {
        switch (max) {
            case r:
                h = (g - b) / d + (g < b ? 6 : 0);
                break;
            case g:
                h = (b - r) / d + 2;
                break;
            case b:
                h = (r - g) / d + 4;
                break;
        }
        h /= 6;
    }
    return `hsv(${Math.round(h * 360)}, ${Math.round(s * 100)}%, ${Math.round(v * 100)}%)`;
}


// flow-typed signature: 3293c963be65904c900cc0e9334c3cc8
// flow-typed version: <<STUB>>/node-vibrant_v^3.0.0/flow_v0.79.1

/**
 * This is an autogenerated libdef stub for:
 *
 *   'node-vibrant'
 *
 * Fill this stub out by replacing all the `any` types.
 *
 * Once filled out, we encourage you to share your work with the
 * community by sending a pull request to:
 * https://github.com/flowtype/flow-typed
 */

declare module 'node-vibrant' {
  declare module.exports: any;
}

/**
 * We include stubs for each file inside this npm package in case you need to
 * require those files directly. Feel free to delete any files that aren't
 * needed.
 */
declare module 'node-vibrant/data/node-example' {
  declare module.exports: any;
}

declare module 'node-vibrant/dist/474d262f2b165bfd49fe.worker' {
  declare module.exports: any;
}

declare module 'node-vibrant/dist/vibrant' {
  declare module.exports: any;
}

declare module 'node-vibrant/dist/vibrant.min' {
  declare module.exports: any;
}

declare module 'node-vibrant/dist/vibrant.worker' {
  declare module.exports: any;
}

declare module 'node-vibrant/dist/vibrant.worker.min' {
  declare module.exports: any;
}

declare module 'node-vibrant/karma.conf' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/browser' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/builder' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/bundle' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/bundle.worker' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/color' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/filter/default' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/filter/index' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/generator/default' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/generator/index' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/image/base' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/image/browser' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/image/node' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/index' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/quantizer/index' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/quantizer/mmcq' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/quantizer/pqueue' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/quantizer/vbox' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/quantizer/worker' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/quantizer/worker/common' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/quantizer/worker/pool' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/quantizer/worker/worker' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/test/builder.spec' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/test/common/data' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/test/common/helper' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/test/common/server' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/test/vibrant.browser-spec' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/test/vibrant.spec' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/typing' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/util' {
  declare module.exports: any;
}

declare module 'node-vibrant/lib/vibrant' {
  declare module.exports: any;
}

declare module 'node-vibrant/webpack.config' {
  declare module.exports: any;
}

// Filename aliases
declare module 'node-vibrant/data/node-example.js' {
  declare module.exports: $Exports<'node-vibrant/data/node-example'>;
}
declare module 'node-vibrant/dist/474d262f2b165bfd49fe.worker.js' {
  declare module.exports: $Exports<'node-vibrant/dist/474d262f2b165bfd49fe.worker'>;
}
declare module 'node-vibrant/dist/vibrant.js' {
  declare module.exports: $Exports<'node-vibrant/dist/vibrant'>;
}
declare module 'node-vibrant/dist/vibrant.min.js' {
  declare module.exports: $Exports<'node-vibrant/dist/vibrant.min'>;
}
declare module 'node-vibrant/dist/vibrant.worker.js' {
  declare module.exports: $Exports<'node-vibrant/dist/vibrant.worker'>;
}
declare module 'node-vibrant/dist/vibrant.worker.min.js' {
  declare module.exports: $Exports<'node-vibrant/dist/vibrant.worker.min'>;
}
declare module 'node-vibrant/karma.conf.js' {
  declare module.exports: $Exports<'node-vibrant/karma.conf'>;
}
declare module 'node-vibrant/lib/browser.js' {
  declare module.exports: $Exports<'node-vibrant/lib/browser'>;
}
declare module 'node-vibrant/lib/builder.js' {
  declare module.exports: $Exports<'node-vibrant/lib/builder'>;
}
declare module 'node-vibrant/lib/bundle.js' {
  declare module.exports: $Exports<'node-vibrant/lib/bundle'>;
}
declare module 'node-vibrant/lib/bundle.worker.js' {
  declare module.exports: $Exports<'node-vibrant/lib/bundle.worker'>;
}
declare module 'node-vibrant/lib/color.js' {
  declare module.exports: $Exports<'node-vibrant/lib/color'>;
}
declare module 'node-vibrant/lib/filter/default.js' {
  declare module.exports: $Exports<'node-vibrant/lib/filter/default'>;
}
declare module 'node-vibrant/lib/filter/index.js' {
  declare module.exports: $Exports<'node-vibrant/lib/filter/index'>;
}
declare module 'node-vibrant/lib/generator/default.js' {
  declare module.exports: $Exports<'node-vibrant/lib/generator/default'>;
}
declare module 'node-vibrant/lib/generator/index.js' {
  declare module.exports: $Exports<'node-vibrant/lib/generator/index'>;
}
declare module 'node-vibrant/lib/image/base.js' {
  declare module.exports: $Exports<'node-vibrant/lib/image/base'>;
}
declare module 'node-vibrant/lib/image/browser.js' {
  declare module.exports: $Exports<'node-vibrant/lib/image/browser'>;
}
declare module 'node-vibrant/lib/image/node.js' {
  declare module.exports: $Exports<'node-vibrant/lib/image/node'>;
}
declare module 'node-vibrant/lib/index.js' {
  declare module.exports: $Exports<'node-vibrant/lib/index'>;
}
declare module 'node-vibrant/lib/quantizer/index.js' {
  declare module.exports: $Exports<'node-vibrant/lib/quantizer/index'>;
}
declare module 'node-vibrant/lib/quantizer/mmcq.js' {
  declare module.exports: $Exports<'node-vibrant/lib/quantizer/mmcq'>;
}
declare module 'node-vibrant/lib/quantizer/pqueue.js' {
  declare module.exports: $Exports<'node-vibrant/lib/quantizer/pqueue'>;
}
declare module 'node-vibrant/lib/quantizer/vbox.js' {
  declare module.exports: $Exports<'node-vibrant/lib/quantizer/vbox'>;
}
declare module 'node-vibrant/lib/quantizer/worker.js' {
  declare module.exports: $Exports<'node-vibrant/lib/quantizer/worker'>;
}
declare module 'node-vibrant/lib/quantizer/worker/common.js' {
  declare module.exports: $Exports<'node-vibrant/lib/quantizer/worker/common'>;
}
declare module 'node-vibrant/lib/quantizer/worker/pool.js' {
  declare module.exports: $Exports<'node-vibrant/lib/quantizer/worker/pool'>;
}
declare module 'node-vibrant/lib/quantizer/worker/worker.js' {
  declare module.exports: $Exports<'node-vibrant/lib/quantizer/worker/worker'>;
}
declare module 'node-vibrant/lib/test/builder.spec.js' {
  declare module.exports: $Exports<'node-vibrant/lib/test/builder.spec'>;
}
declare module 'node-vibrant/lib/test/common/data.js' {
  declare module.exports: $Exports<'node-vibrant/lib/test/common/data'>;
}
declare module 'node-vibrant/lib/test/common/helper.js' {
  declare module.exports: $Exports<'node-vibrant/lib/test/common/helper'>;
}
declare module 'node-vibrant/lib/test/common/server.js' {
  declare module.exports: $Exports<'node-vibrant/lib/test/common/server'>;
}
declare module 'node-vibrant/lib/test/vibrant.browser-spec.js' {
  declare module.exports: $Exports<'node-vibrant/lib/test/vibrant.browser-spec'>;
}
declare module 'node-vibrant/lib/test/vibrant.spec.js' {
  declare module.exports: $Exports<'node-vibrant/lib/test/vibrant.spec'>;
}
declare module 'node-vibrant/lib/typing.js' {
  declare module.exports: $Exports<'node-vibrant/lib/typing'>;
}
declare module 'node-vibrant/lib/util.js' {
  declare module.exports: $Exports<'node-vibrant/lib/util'>;
}
declare module 'node-vibrant/lib/vibrant.js' {
  declare module.exports: $Exports<'node-vibrant/lib/vibrant'>;
}
declare module 'node-vibrant/webpack.config.js' {
  declare module.exports: $Exports<'node-vibrant/webpack.config'>;
}


/*
 *
 * Copyright 2017 gRPC authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */

#ifndef GRPC_CORE_LIB_COMPRESSION_STREAM_COMPRESSION_GZIP_H
#define GRPC_CORE_LIB_COMPRESSION_STREAM_COMPRESSION_GZIP_H

#include <grpc/support/port_platform.h>

#include "src/core/lib/compression/stream_compression.h"

extern const grpc_stream_compression_vtable grpc_stream_compression_gzip_vtable;

#endif